在RewriteRule中,如果模式和替换以相同的字符串开头,则RewriteRule不起作用。为什么?

时间:2013-11-30 15:03:46

标签: php regex apache .htaccess mod-rewrite

在这篇文章中:My previous post我正在寻求一个奇怪问题的帮助:正确的正则表达式不能用于RewriteRule。经过几个小时的工作,我找到了如何修复错误,我发现了这个奇怪的事情。

如果我在.htaccess中写下这条规则:

RewriteRule ^rankings\/[a-zA-Z0-9\-]+\.html$ /rankings.php

并输入此网址

http://www.mywebsite.net/rankings/classifica.html

我收到404错误。即使正则表达式是正确的,apache RewriteEngine也无效。 相反,如果我写这个规则:

RewriteRule ^ran-kings\/[a-zA-Z0-9\-]+\.html$ /rankings.php

并输入此网址

http://www.mywebsite.net/ran-kings/classifica.html

一切正常。我用不同的规则和页面进行了许多其他测试,我总是遇到同样的问题。 我得出的结论是,如果模式和替换以相同的单词开头,则RewriteRule不起作用。

这怎么可能?有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

实际上真正的问题是MultiViews optionMultiviews允许替换文件扩展名,因此您可以使用http://www.example.com/page.php调用http://www.example.com/page之类的网址。

在.htaccess上使用此行停用它:

Options -MultiViews