0

即使存在与请求的 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 导致 500 错误而不是 404表明缺少 -f RewriteCond 会阻止递归,但这会导致我不想发生的行为。

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

4

1 回答 1

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]
于 2009-12-13T23:30:56.140 回答