我的 Apache2.2 似乎是这样工作的:当我www.site.com/name
首先请求时,它正在寻找 folder /name/
,如果没有找到,接下来它正在寻找 file name.php
。
但是当我打开RewriteEngine On
.htaccess 并添加时,尽管有 RewriteRule RewriteRule ^name$ name2.php
,Apache 仍然会查看是否有文件夹或文件name
。
如何给予 RewriteRule 优先级?
我的 Apache2.2 似乎是这样工作的:当我www.site.com/name
首先请求时,它正在寻找 folder /name/
,如果没有找到,接下来它正在寻找 file name.php
。
但是当我打开RewriteEngine On
.htaccess 并添加时,尽管有 RewriteRule RewriteRule ^name$ name2.php
,Apache 仍然会查看是否有文件夹或文件name
。
如何给予 RewriteRule 优先级?
我在这里找到了解决方案http://httpd.apache.org/docs/2.2/content-negotiation.html - “Apache 中的协商”部分,“Multiviews”副标题:
MultiViews 的效果如下:如果服务器收到对 /some/dir/foo 的请求,如果 /some/dir 启用了 MultiViews,并且 /some/dir/foo 不存在,则服务器读取目录寻找名为 foo.* (...) 的文件
所以就我而言(我使用 mod_userdir),我编辑了/etc/apache2/mods-enabled/userdir.conf
<IfModule mod_userdir.c>
(...)
<Directory /home/*public_html>
(...)
#Options MultiViewes # I COMMENTED OUT THIS OPTION
</Directory>
</IfModule>
现在,如果我请求www.domain.com/foo
apache将不会搜索目录中命名foo
的文件!从现在开始RewriteRule ^name$ another-name.php
就可以了。