我想要的是,只有访问我的根域意味着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规则,则重写将按预期工作。
任何想法可能导致服务器表现如此?
答案 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。
错误本身(以及解决方法示例)记录在以下链接中: