子目录中的 FallbackResource

Mos*_*atz 7 rewrite apache-2.4

我使用前端控制器和以下 htaccess 文件管理大量 PHP 应用程序:

FallbackResource /index.php
Run Code Online (Sandbox Code Playgroud)

是的,这是整个文件(对于每个应用程序)!

但是,一些站点位于子文件夹中,因此需要进行以下更改:

FallbackResource /subfolder/index.php
Run Code Online (Sandbox Code Playgroud)

正如你可能猜到的,/开头的意思是路径是相对于站点/虚拟主机的,这里的路径需要是相对于目录的。

(如果我使用mod_rewritethis 而不是mod_dir,我将不得不RewriteBase根据需要以类似的方式向每个子目录添加。)

我认为我可以通过这样做来解决这个问题:

FallbackResource index.php # No slash!
Run Code Online (Sandbox Code Playgroud)

但是,当站点的重写包含斜杠时,例如,如果应用程序是/store/并且其中的路径是products/1234,则 Apache 会查找/store/products/index.php代替/store/index.php并在日志中返回 500 并带有以下消息:

由于可能的配置错误,请求超出了 10 个子请求嵌套级别的限制。如有必要,请使用“LimitInternalRecursion”来增加限制。使用“LogLevel debug”获取回溯。

我原以为该FallbackResource路径是相对于配置它的 .htaccess 文件的,但似乎它实际上是相对于请求的 URL。

有没有FallbackResource办法按照我预期的方式行事?


如果这是答案,我可以按原样使用它,但如果可以这样做,它将使管理我拥有的站点变得更加容易。这些站点使用具有不同主题和数据库连接的相同基本代码,现在的工作方式我必须在每次部署新版本代码时修改 htaccess 文件(因为它已被检入 Git)。如果我们可以做到让某人不必每次都记住进行此修改,那就太好了。

Mos*_*atz 0

我最初问这个问题的网站已不再存在,但这就是我最终所做的。

我最终将这些站点移动到运行 Nginx 的服务器,其中所有配置都是使用指令在服务器的配置文件中完成的try_files。这样管理起来要容易得多。