即使存在与请求的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的文件,也只是重写?
答案 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]