在我的服务器上,我有一个.htaccess文件,其中包含以下内容:
RewriteCond %{HTTP_HOST} ^myhost.local$
RewriteRule ^default/.*$ /index.php?id=12345 [L]
RewriteCond %{HTTP_HOST} ^myhost.local$
RewriteCond %{REQUEST_URI} ^/?$
RewriteRule ^(.*)$ http://myhost.local/default/home [R=302,NC]
这种现象是,在请求http://myhost.local/时,不是按预期将302重定向到http://myhost.local/default/home,而是将301(!)重定向回http://myhost.local/,从而导致无限循环
另一个奇怪的事情是^/$
似乎永远不会与我的网址匹配,即使它应该匹配,因此出于某种原因我必须使用带有问号的^/?
。每当没有匹配时,就不会发生重写,因此没有无限循环,所以这进一步证明,如果条件满足,我的RewriteRule
^(.*)$
确实被选中,只有我想要的重定向到并完全忽略了什么代码。
为了记录,我也有这种格式的规则:
RewriteCond %{HTTP_HOST} ^myhost.local$
RewriteRule ^default/.*$ /index.php?id=12345 [L]
RewriteCond %{HTTP_HOST} ^myhost.local$
RewriteRule ^/?$ http://myhost.local/default/home [R=302,NC]
其结果与第一个例子完全相同。
导致重定向发生的原因是什么,而不是我实际给出的URL?
注意事项:
RewriteOptions inherit
答案 0 :(得分:0)
罪魁祸首是在同一个.htaccess文件中:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^.+/.* http://%{HTTP_HOST}/ [R=301,L]
这也很容易解释301。