目录索引页面位于htaccess之前

时间:2016-02-02 20:29:31

标签: apache .htaccess mod-rewrite directoryindex

我想要的是,只有访问我的根域意味着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规则,则重写将按预期工作。

任何想法可能导致服务器表现如此?

1 个答案:

答案 0 :(得分:0)

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

  

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

此问题已在Apache 2.4.9中修复。

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

如果无法升级,您还可以使用条件SetHandler解决问题(基于RewriteRule中的env var设置)。这将仅针对那些请求禁用DirectoryIndex。

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

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