2012-10-29 15 views
10

Ho le seguenti regole di riscrittura htaccess. La condizione una regola per evitare il looping è stato originariamente scritto in questo modo:Apache mod_rewrite REDIRECT_STATUS condizione che causa elenco di directory

RewriteCond %{ENV:REDIRECT_STATUS} ^. 

Ha usato per funzionare bene, fino a quando improvvisamente smesso di funzionare causando Apache per visualizzare l'elenco di directory del sito.

ho dovuto cambiare a questa nuova forma, come nella lista qui sotto, per farlo funzionare di nuovo:

RewriteCond %{ENV:REDIRECT_STATUS} 200 

Avete qualche idea del motivo di questo comportamento?

Grazie

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

Avete mai la risposta per questo? – anubhava

+0

realtà non :(non male fintanto che funziona bene, ancora mi sarebbe piaciuto capire il motivo :) – Timido

risposta

8

avete questa condizione per interrompere il ciclo:

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

Questo funziona controllando interno Apache variabile %{ENV:REDIRECT_STATUS}. Questa variabile è vuota all'inizio del modulo di riscrittura, ma è impostata su 200 quando si verifica la prima riscrittura interna riuscita. Questa condizione sopra dice salvataggio di ulteriori riscritture dopo la prima riscrittura riuscita e arresta il ciclo.

+0

Come è diversa da quella che avevo all'inizio? vale a dire: 'RewriteCond% {ENV: REDIRECT_STATUS}^.' – Timido

+0

Vedere la sua condizione' RewriteCond% {ENV: REDIRECT_STATUS}^.' corrisponderà ogni volta '% {ENV: REDIRECT_STATUS}' è non vuoto, senza fare in modo che sia 200 (successo). – anubhava

+0

'% {ENV: REDIRECT_STATUS}' viene impostato per altri casi anche da mod_dir, ErrorDocument ecc – anubhava

Problemi correlati