2010-10-20 18 views
8

He fallado en Google y no he podido encontrar la respuesta buscando aquí. Lo siento, soy nuevo en htaccess y tiene una sintaxis muy extraña y es muy difícil de aprender.Cómo hacer htaccess redirigir según el valor de cookie

Se puede ver lo que estoy tratando de hacer aquí ...

RewriteEngine on 
RewriteCond %{HTTP_COOKIE} ^.*user_id=(\d+).*$ [NC] 
RewriteRule .* http://localhost/mysite/cache/$1 [R=301,L] 
RewriteRule .* http://localhost/mysite/cache/guest [R=301,L] 

estoy almacenamiento en caché de las páginas para cada usuario de la velocidad de carga. Deseo redirigirme a la carpeta de caché HTML adecuada si han iniciado sesión con una cookie; de ​​lo contrario, deseo cargar la caché de invitado.

Ahora entra en un infi-loop. Si elimino [R = ... entonces obtengo el error interno del servidor.

Por favor ayuda! ¡¡¡Gracias!!!

Respuesta

8

Esto funciona para una galleta como id=1234:

RewriteEngine on 
RewriteCond %{HTTP_COOKIE} ^id=([0-9]*)$ [NC] 
RewriteRule .* http://localhost/mysite/cache/%1 [R=301,L] 
RewriteRule .* http://localhost/mysite/cache/guest [R=301,L] 

Ahora para su problema: Asegúrese de que su .htaccess no se aplica a la página que regrabar en! Por ejemplo, si su .htaccess radica en /mysite/.htaccess

Se usará de nuevo en

http://localhost/mysite/cache/%1 

Eso es quizá la razón de su bucle infinito. Para resolver esto, asegúrese de que las reglas de htaccess no se apliquen a los subdirectorios o use otro directorio para la caché.

+0

¿Dónde puedo buscar información sobre cómo decir a qué subdirectorios aplicar? Gracias. – BinaryGal

+0

Finalmente encontré una página web con la respuesta: http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html#menu0-el14 El truco es usar un guión "-". Aquí está mi solución que funciona: RewriteRule ^. + $ - [L] – BinaryGal

1

Aquí está la solución para cualquier otra persona tienen este problema:

RewriteEngine on 
RewriteRule ^.+$ - [L] 
RewriteCond %{HTTP_COOKIE} ^.*user_id=(\d+).*$ [NC] 
RewriteRule .* http://localhost/mysite/$1 [R=301,L] 
RewriteRule .* http://localhost/mysite/guest [R=301,L] 

Aunque no he probado todavía la parte de galletas - Estoy seguro de que habrá muchos más problemas allí! ¡Pero el resto lo probé y funciona! (va a invitado y luego no entra en infi-loop, ¡sí!)

¡Que tengas un buen día! 8)

+3

pensé que agregaría, si quieres redirigir si user_id NO está presente, hazlo en su lugar: 'RewriteCond% {HTTP_COOKIE}! ^. * User_id = (\ d +). * $ [NC] ' –

Cuestiones relacionadas