.htaccess - 通过 URL 重写防止无限循环
.htaccess - preventing infinite loops with URL rewriting
我有一个包含以下内容的 .htaccess :
<Files .htaccess>
order allow,deny
deny from all
</Files>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !^(.*)/maintenance/(.*)$ [NC]
RewriteRule ^(.*).jpg$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteRule ^(.*).jpeg$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteRule ^(.*).gif$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteRule ^(.*).png$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteRule ^(.*).php$ /mysite/maintenance/maintenance.php [NC,R=302,L]
在本地主机上测试。
使用这些设置,我在尝试加载时出现无限循环 http://localhost/mysite/test.php, (correctly) redirected to http://localhost/mysite/maintenance/maintenance.php
循环似乎是由于 4 图片重定向造成的(注意:维护页面有一个独特的 jpg 背景图片位于维护文件夹根目录中)。注释这 4 条重定向行可以解决问题。
但我不明白为什么我会进入无限循环,因为 /maintenance/ 路径本身被排除在 RewriteCond 的重定向之外,以及为什么图像上的重定向会干扰这个问题。
你能帮忙吗?
您必须像这样重新订购您的 RewriteConds
:
RewriteEngine On
RewriteRule \.jpg$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteRule \.jpeg$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteRule \.gif$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteCond %{REQUEST_URI} !^.*/maintenance/.*$ [NC]
RewriteRule \.png$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteCond %{REQUEST_URI} !^.*/maintenance/.*$ [NC]
RewriteRule \.php$ /mysite/maintenance/maintenance.php [NC,R=302,L]
RewriteCond
指令仅影响其后的第一个 RewriteRule
。
我知道这个问题的答案已被接受,但这里有一个更短的方法可以使用:
RewriteEngine On
RewriteRule \.(jpe?g|gif)$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteCond %{REQUEST_URI} !/maintenance/ [NC]
RewriteRule \.(png|php)$ /mysite/maintenance/transparent. [NC,R=302,L]
我有一个包含以下内容的 .htaccess :
<Files .htaccess>
order allow,deny
deny from all
</Files>
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_URI} !^(.*)/maintenance/(.*)$ [NC]
RewriteRule ^(.*).jpg$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteRule ^(.*).jpeg$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteRule ^(.*).gif$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteRule ^(.*).png$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteRule ^(.*).php$ /mysite/maintenance/maintenance.php [NC,R=302,L]
在本地主机上测试。
使用这些设置,我在尝试加载时出现无限循环 http://localhost/mysite/test.php, (correctly) redirected to http://localhost/mysite/maintenance/maintenance.php
循环似乎是由于 4 图片重定向造成的(注意:维护页面有一个独特的 jpg 背景图片位于维护文件夹根目录中)。注释这 4 条重定向行可以解决问题。
但我不明白为什么我会进入无限循环,因为 /maintenance/ 路径本身被排除在 RewriteCond 的重定向之外,以及为什么图像上的重定向会干扰这个问题。
你能帮忙吗?
您必须像这样重新订购您的 RewriteConds
:
RewriteEngine On
RewriteRule \.jpg$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteRule \.jpeg$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteRule \.gif$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteCond %{REQUEST_URI} !^.*/maintenance/.*$ [NC]
RewriteRule \.png$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteCond %{REQUEST_URI} !^.*/maintenance/.*$ [NC]
RewriteRule \.php$ /mysite/maintenance/maintenance.php [NC,R=302,L]
RewriteCond
指令仅影响其后的第一个 RewriteRule
。
我知道这个问题的答案已被接受,但这里有一个更短的方法可以使用:
RewriteEngine On
RewriteRule \.(jpe?g|gif)$ /mysite/maintenance/transparent.png [NC,R=302,L]
RewriteCond %{REQUEST_URI} !/maintenance/ [NC]
RewriteRule \.(png|php)$ /mysite/maintenance/transparent. [NC,R=302,L]