即使存在相同URL的文件,也会执行重写(不会收到错误500:无限递归)

时间:2009-12-13 23:27:32

标签: .htaccess rewrite

即使存在与请求的URL位于同一位置的文件,我也试图在.htaccess文件中重写。

即。即使/about/index.html中有文件,我也希望重写/about/index.html。

目前我有:

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^thehost.example.com$
RewriteCond %{REQUEST_URI} !^/dont-rewrite-when-at-this-url
RewriteRule ^(.*)(/|\.html|\.txt)$ /path/to/stubfile.html?/$1$2 [last,qsappend]

问题在于,如果我要求

http://thehost.example.com/about/index.html

并且/about/index.html中的文件存在(这就是我想要的,即如果文件存在,则会发生重写,但如果没有,也会发生重写)

然后我得到错误500:无限递归。

(添加RewriteCond以免除存根文件本身被重写没有任何区别。)

htaccess rewrite causes 500 error instead of 404表明缺少-f RewriteCond会阻止递归,但这会导致我不希望发生的行为。

有没有办法让Rewrite发生,即忽略文件存在的事实,即使存在相同URL的文件,也只是重写?

1 个答案:

答案 0 :(得分:0)

只需排除您要重定向到的目的地,在本例中为/path/to/stubfile.html

RewriteCond %{HTTP_HOST} ^thehost.example.com$
RewriteCond %{REQUEST_URI} !^/dont-rewrite-when-at-this-url
RewriteCond %{REQUEST_URI} !=/path/to/stubfile.html
RewriteRule ^(.*)(/|\.html|\.txt)$ /path/to/stubfile.html?/$1$2 [last,qsappend]