2011-02-09 15 views
13

Tengo un error de recursión de reescritura en algún lugar de mi sitio web que causó Google Bot, pero no puedo encontrar la URL que lo causó porque mi Loglevel es bajo. Lo levanté, pero no ha vuelto a suceder hasta ahora.¿Qué significa esta Autorización HTTP RewriteRule?

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

Todas las regrabaciones se ven bien para mí y tienen la bandera [L], excepto esta.

No lo entiendo del todo. Es del sistema de tienda de código abierto Magento.

Por lo que puedo decir, no hace más que establecer la variable de entorno E. Pero, ¿no es esa una manera muy estúpida de hacerlo? ¿No debería usar SetEnv si ese era el objetivo?

Respuesta

7

Esta línea establece la variable de entorno en el valor de la cadena de autenticación de usuario, básicamente estableciendo una variable en lugar de un valor constante. Hasta donde yo sé, SetEnv y SetEnvIf solo le permiten establecer una variable de entorno a una constante predeterminada.

La variable que se está configurando es HTTP_AUTHORIZATION, no E. Supongo que esto es parte del proceso de autenticación del usuario.

+1

En su lugar, podría usar 'SetEnvIf' si lo desea. De hecho, esto podría ser incluso preferible si tiene archivos .htaccess en subdirectorios que usan mod_rewrite (¡ya que puede anular su autenticación!). p.ej. 'SetEnvIf Authorization. + HTTP_AUTHORIZATION = $ 0' – DocRoot

14

Symfony developers Group tiene una buena respuesta para eso. Cito:

parece que su hosting está ejecutando php como un fcgi, no como un php5_module, como lo hace su servidor local. (phpinfo - Server API: CGI/FastCGI)

El punto es que php5_module maneja automáticamente los encabezados HTTP_AUTHORIZATION, pero fcgi_module no.

solución es simple - añadir esta línea a su .htacces en su servidor de alojamiento:.

RewriteRule * - [E = HTTP_AUTHORIZATION:% {HTTP: Autorización}, L]

Funcionó para mí

+5

Si hay otras reglas de reescritura' RewriteRule. * - [E = HTTP_AUTHORIZATION:% {HTTP: Authorization}] 'debe agregarse ** antes de ** ellos, ** sin el" L " opción**. – naitsirch

Cuestiones relacionadas