2012-10-29 16 views
10

Aşağıdaki htaccess yeniden yazma kurallarına sahibim. döngü engellemek için bir kural koşulu başlangıçta bu şekilde yazılmıştır:Apache mod_rewrite REDIRECT_STATUS koşul neden dizin listeleme

RewriteCond %{ENV:REDIRECT_STATUS} ^. 

Sadece iyi çalışmak için kullanılan, aniden Apache web sitesinin dizin listesini görüntülenmesine neden çalışmayı durdurdu kadar.

aşağıda liste olduğu gibi bu yeni forma değiştirmek zorunda, tekrar çalışmak zorunda:

RewriteCond %{ENV:REDIRECT_STATUS} 200 

bu davranışın nedeni bir fikrin var mı?

Sen döngü durdurmak için bu durum var size

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] 
+0

Bunun için cevabı hiç aldınız mı? – anubhava

+0

aslında değil: (çünkü iyi çalışıyor, kötü değil, hala nedenini anlamak isterdim :) – Timido

cevap

8

ederiz:

## Internal Redirect Loop Protection 
RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule^- [L] 

Bu iç Apaçi değişkeni %{ENV:REDIRECT_STATUS} kontrol ederek çalışır. Bu değişken, yeniden yazma modülünün başlangıcında boştur, ancak ilk başarılı dahili yeniden yazma işlemi gerçekleştiğinde 200 olarak ayarlanır. Yukarıdaki bu durum, ilk başarılı yeniden yazma işleminden sonra tekrar yazılanları kurtarır ve döngü yapmayı durdurur.

+0

Başladığımdan farklı olan nasıl? 'RewriteCond% {ENV: REDIRECT_STATUS}^.' – Timido

+0

Durumunuzu görün 'RewriteCond% {ENV: REDIRECT_STATUS} ^.', '% {ENV: REDIRECT_STATUS}' boş olmadığında eşleşir; 200 (başarı). – anubhava

+0

'% {ENV: REDIRECT_STATUS}', mod_dir, ErrorDocument vb. Gibi diğer durumlar için ayarlanmış olur. – anubhava

İlgili konular