在RewriteRule中,如果模式和替换以同一字符串开头,则RewriteRule';不起作用.为什么?


In RewriteRule if pattern and substitution begin with the same string, the RewriteRule doesn't work. Why?

在这篇文章中:我的上一篇文章我请求帮助解决一个奇怪的问题:正确的正则表达式在RewriteRule中不起作用。经过几个小时的工作,我发现了如何修复错误,并发现了这个奇怪的事情。

如果我在.htaccess:中编写此规则

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

并键入此URL

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

我得到一个404错误。即使Regexp是正确的,apache重写引擎也不起作用。相反,如果我写这个规则:

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

并键入此URL

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

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

这怎么可能?有人知道为什么会发生这种事吗?

实际上真正的问题是MultiViews选项Multiviews允许替换文件扩展名,因此可以使用http://www.example.com/page调用类似http://www.example.com/page.php的URL。

使用.htaccess顶部的此行禁用它:

Options -MultiViews