Apache 目录索引页位于htaccess之前

Apache 目录索引页位于htaccess之前,apache,.htaccess,mod-rewrite,directoryindex,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 %{RE

我想要的是,只有当我的根域被访问意味着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文件时工作。类似于目录索引和访问规则?如果我删除index.php或将其重命名为index2.php,并相应地更改htaccess规则,则重写将按预期工作


您知道是什么原因导致服务器出现这种行为吗?

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

“问题是由DirectoryIndex指令引起的。mod_dir不是 关于重写执行的结果。如果DirectoryIndex 设置为disabled(禁用),它将开始正常工作。“

这个问题在Apache2.4.9中得到了修复

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

如果升级不是一个选项,您还可以使用条件SetHandler(基于重写规则中的env var集)解决该问题。这将仅对这些请求禁用DirectoryIndex

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


不确定您运行的是什么版本的Apache,但这个错误听起来很相似:我认为您一定是对的。Apache的工作环境是2.2.2,不工作环境是2.4.7。不幸的是,这台服务器不在我的控制之下,管理员告诉我2.4.9版本还不是LTS,我将不得不等待大约两个月。目前,我可以使用一些变通方法来解决这个问题。谢谢你的发现,我会把它标记为已接受。看起来好像是版主删除了我的原始答案并将其转换为评论。这次我把我的答案贴在了更详细的上下文中。。。如果你能重新接受。谢谢