首页 > 解决方案 > 我可以同时使用 Apache fallbackresource 和 rewrite 吗?

问题描述

.htaccess我有一个使用默认mod_rewrite 规则的现有 WordPress 站点。

现在我想在站点自己的子目录中使用前端控制器向站点添加一些单独的 PHP 代码。我在 Apache vhost 配置中使用fallbackresource指令来执行此操作,并最终得到:

# New PHP front-controller based config
<directory "/srv/www/example.com/public/admin/products">
  AllowOverride None
  FallbackResource /admin/products/index.php
</directory>

# WordPress config
<directory "/srv/www/example.com/public">
  AllowOverride All
</directory>

几乎可以工作!正确执行的请求——/admin/products /admin/products/index.php输出产品列表。但是,表单中特定产品的链接/admin/products/{prod-id}最终会传递给 WordPress 的/index.php脚本,这给了我一个 WordPress 生成的 404。

我可以通过使 WordPress 的东西也使用fallbackresource指令而不使用.htaccess或重写规则来解决这个问题,但我更愿意让 WordPress 位保持原样工作。

# WordPress config
<directory "/srv/www/example.com/public">
  AllowOverride None
  FallbackResource /index.php
</directory>

谁能解释为什么重写规则似乎优先于fallbackresource指令?

标签: apacheapache-config

解决方案


回答我自己的问题:是的,我可以同时使用 Apachefallbackresource rewrite规则。

它不适用于给出的示例的原因是因为 WordPress .htaccess 重写规则正在捕获所有请求,包括我希望由我自己的前端控制器处理的请求,例如GET /admin/products被 .htaccess 重写规则捕获并传递给 /index。 php

最后,我决定坚持使用fallbackresourceWordPress 的指令,并使用AllowOverride None它来防止 .htaccess 被使用。


推荐阅读