I have the following htaccess rewrite rules.
The one rule condition to prevent looping was originally written this way:
RewriteCond %{ENV:REDIRECT_STATUS} ^.
It used to work just fine, until it suddenly stopped working causing Apache to display the directory listing of the website.
I had to change it to this new form, as in the listing below, to have it work again:
RewriteCond %{ENV:REDIRECT_STATUS} 200
Do you have any idea of the reason of this behaviour?
Thank you
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]
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…