2016-02-02 54 views
0

我想要的是只有当我的根域被访问时,意味着URI是空的,它会被重写而不重定向,否则重写为index.php,如果不访问文件或文件夹。我的.htaccess看起来是这样的:目录索引页在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

不知道你正在运行的Apache的版本,但这个错误发音相似:https://开头BZ。 apache.org/bugzilla/show_bug.cgi?id=53929 –

+0

我认为你一定是对的。它的工作地点Apache是​​2.2.2,它不是2.4.7。不幸的是,这台服务器不在我的控制之下,管理员告诉我说2.4.9版本不是LTS,我需要等待两个月。目前我可以接受使用一些解决方法。感谢您的发现,我会将其标记为已接受。 – igrynsh

+0

igrynsh。它看起来像一个主持人删除我原来的答案,并将其转换为评论。我这次重新发布了我的答案,如果你能重新接受。谢谢! –

回答

0

有Apache中引入了一个bug 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

相关问题