2011-02-09 13 views
13

Ho un errore di ricorsione di riscrittura da qualche parte sul mio sito Web causato da Google Bot, ma non riesco a trovare l'URL che l'ha causato perché il mio Loglevel è basso. L'ho sollevato ma non è successo di nuovo finora.Che cosa fa questo RewriteRule di autorizzazione HTTP?

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

Tutte le Rewriterules mi sembrano belle e hanno la bandiera [L], tranne questa.

Non riesco a capirlo. È dal sistema di negozio open source Magento.

Per quanto posso dire, non fa altro che impostare la variabile di ambiente E. Ma non è un modo molto stupido per farlo? Non dovresti usare SetEnv se quello era l'obiettivo?

risposta

7

Questa riga imposta la variabile di ambiente sul valore della stringa di autenticazione utente, impostando essenzialmente una variabile anziché un valore costante. Per quanto ne so, SetEnv e SetEnvIf consentono solo di impostare una variabile di ambiente su una costante predeterminata.

La variabile impostata è in realtà HTTP_AUTHORIZATION, non E. Immagino che questo faccia parte del processo di autenticazione dell'utente.

+1

Se si desidera, è possibile utilizzare "SetEnvIf". In effetti questo potrebbe anche essere preferibile se si hanno file .htaccess in sottodirectory che usano mod_rewrite (dato che si potrebbe sovrascrivere l'autenticazione!). per esempio. 'Autorizzazione SetEnvIf. + HTTP_AUTHORIZATION = $ 0' – DocRoot

14

Symfony developers Group ha una buona risposta per questo. Cito:

sembra che il tuo hosting esegua php come fcgi, non un php5_module, come fa il tuo localhost. (phpinfo - Server API: CGI/FastCGI)

il punto è che php5_module gestisce automaticamente le intestazioni HTTP_AUTHORIZATION, ma fcgi_module no.

soluzione è semplice - aggiungere questa linea al tuo .htacces sul server di hosting:.

RewriteRule * - [E = HTTP_AUTHORIZATION:% {HTTP: Autorizzazione}, L]

Ha funzionato per me

+5

Se esistono altre regole di riscrittura' RewriteRule. * - [E = HTTP_AUTHORIZATION:% {HTTP: Autorizzazione}] 'deve essere aggiunto ** prima di ** loro, ** senza la" L " opzione**. – naitsirch