0

我想要的是,只有当我的根域被访问意味着 URI 为空时,它才会被重写而不重定向,否则如果不访问文件或文件夹,则重写为 index.php。我的 .htaccess 看起来像这样:

RewriteEngine On
RewriteBase /
RewriteRule ^/?$ /mypages/landing_page.html [QSA,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

它在某些服务器上按预期工作,但在另一个服务器上,它仅在文件夹中没有 index.php 文件时才有效。类似于 htaccess 规则之前的目录索引?如果我删除 index.php 或将其重命名为 index2.php 并相应地更改我的 htaccess 规则,则重写按预期工作。

有什么想法可能导致服务器表现得那样吗?

4

1 回答 1

0

Apache 2.4.2 ( #53929 ) 中引入了一个错误,它与您描述的症状相同:

“问题是由 DirectoryIndex 指令引起的。mod_dir 不尊重重写执行的结果。如果 DirectoryIndex 设置为禁用,它会开始正常工作。”

该问题已在 Apache 2.4.9 中修复。

如果您有一个混合环境(即 Apache 2.4.2 之前和之后的版本),这也可以解释为什么您的 Rewrite 在某些服务器上可以正常工作,而在其他服务器上不能正常工作。

如果升级不是一个选项,您还可以使用条件 SetHandler(基于 RewriteRule 中设置的环境变量)解决此问题。这将为那些请求禁用 DirectoryIndex。

错误本身(和解决方法示例)记录在以下链接中:

https://bz.apache.org/bugzilla/show_bug.cgi?id=53929

于 2016-02-08T17:35:25.027 回答