我有以下 htaccess 重写规则。 防止循环的单规则条件最初是这样写的:
RewriteCond %{ENV:REDIRECT_STATUS} ^.
它曾经工作得很好,直到它突然停止工作,导致 Apache 显示网站的目录列表。
我必须将其更改为新形式,如下面的 list 所示,才能使其再次工作:
RewriteCond %{ENV:REDIRECT_STATUS} 200
您知道这种行为的原因吗?
谢谢
RewriteEngine on
RewriteBase /
## Permanent 301
## Force to www. Un-comment in production.
RewriteCond %{HTTP_HOST} !^www\.myhost\.com [NC]
RewriteRule ^(.*) http://www.myhost.com/$1 [L,R=301]
## Permanent redirect rules for contents
RewriteRule ^argument/programming/?$ tags/programming [NC,L,R=301]
## Internal Redirect Loop Protection
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
## Maintenance page
#RewriteRule (.*) special/maintenance.html
## Specials
RewriteRule special/(.*) special/$1 [NC,L]
## Static resources
RewriteRule ^(.*\.(js|ico|gif|jpg|png|css|rss|xml|htm|html|pdf|zip|gz|txt))$ public/$1 [NC,L]
## Front Controller
RewriteRule ^(.*) public/index.php [NC,L]
最佳答案
您有以下条件可以停止循环:
## Internal Redirect Loop Protection
RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule ^ - [L]
这通过检查内部 Apache 变量 %{ENV:REDIRECT_STATUS}
来实现。该变量在重写模块开始时为空,但在第一次成功的内部重写发生时设置为 200。上述条件表示在第一次成功重写后退出进一步重写并停止循环。
关于regex - Apache mod_rewrite REDIRECT_STATUS 条件导致目录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13121297/