2012-10-29 11 views
10

Mam następujące reguły przepisywania htaccess. Warunkiem jedna zasada, aby zapobiec zapętlenie został napisany w ten sposób:Parametr Apache mod_rewrite REDIRECT_STATUS powodujący wyświetlanie katalogu

RewriteCond %{ENV:REDIRECT_STATUS} ^. 

Kiedyś działać dobrze, aż nagle przestał działać powodując Apache, aby wyświetlić listę katalogów stronie internetowej.

musiałem go zmienić na tej nowej formy, jak w poniższym wykazie, muszą działać ponownie:

RewriteCond %{ENV:REDIRECT_STATUS} 200 

Czy masz jakieś pojęcie o powód takiego zachowania?

Dziękuję

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

Czy kiedykolwiek otrzymałeś odpowiedź na to pytanie? – anubhava

+0

w rzeczywistości nie :(nie jest tak źle, dopóki działa poprawnie, nadal chciałbym zrozumieć powód :) – Timido

Odpowiedz

8

Masz ten warunek, aby zatrzymać pętli:

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

ten działa poprzez sprawdzenie wewnętrznej Apache zmienną %{ENV:REDIRECT_STATUS}. Ta zmienna jest pusta na początku modułu przepisywania, ale jest ustawiona na 200, gdy nastąpi pierwsze udane przepisanie wewnętrzne. Ten powyższy warunek mówi o wyjęciu z kolejnych zapisów po pierwszym pomyślnym przepisaniu i zatrzymaniu zapętlenia.

+0

Jak to się różni od tego, który miałem na początku? to jest: 'RewriteCond% {ENV: REDIRECT_STATUS}^.' – Timido

+0

Zobacz swój warunek' RewriteCond% {ENV: REDIRECT_STATUS}^.' będzie pasował, gdy '% {ENV: REDIRECT_STATUS}' nie będzie puste, bez upewnienia się, że jest 200 (sukces). – anubhava

+0

'% {ENV: REDIRECT_STATUS}' ustawia się także dla innych przypadków przez mod_dir, ErrorDocument itp. – anubhava

Powiązane problemy