Verifique las cookies y redirija con Apache

Me encantaría recibir comentarios sobre esto. No estoy seguro de si es el enfoque correcto.

Los detalles

Estoy ejecutando Apache 2 con PHP 5.3 / MySQL 4 y Drupal 6 es la plataforma.

Estoy desarrollando un sitio que contiene reseñas de restaurantes en un par de ciudades seleccionadas. Cuando los usuarios llegan al sitio, pueden elegir qué ciudad es suya. Guardo su elección en una cookie y, si no ha hecho una elección, he seleccionado una ciudad predeterminada.

Solución propuesta

Ahora quiero que la URL mydomain.com/reviews redirija a la URL específica de la ciudad en función de su elección de ciudad. Por ejemplo midominio.com/reviews/paris si he seleccionado París como mi ciudad. (Si no hay ninguna cookie configurada, debería redirigirse a la ciudad predeterminada).

Considero que esta es la mejor alternativa porque quiero que el usuario pueda ver reseñas en otra ciudad sin cambiar de ciudad. Si desean ver reseñas de un restaurante de Londres, simplemente pueden ir a mydomain.com/reviews/london.

Para obtener el mejor rendimiento, estoy pensando en que Apache verifique la cookie y realice la redirección a la ciudad correcta cuando el usuario vaya a mydomain.com/reviews.

Asi que aqui están mis preguntas…

  1. ¿Cómo configuro Apache para hacer esto?
  2. ¿Es esta la mejor manera de hacerlo?

preguntado el 16 de mayo de 11 a las 18:05

3 Respuestas

  1. Para configurar Apache para hacer esto, use lo siguiente, reemplazando con el nombre de la cookie.

    RewriteEngine on
    RewriteCond %{REQUEST_URI} ^/reviews/?$
    RewriteCond %{HTTP_COOKIE} <cookie>=([^;]+)
    RewriteRule .* http://mydomain.com/reviews/%1 [R=302,L]
    
  2. Yelp almacena la ubicación en una cookie, así que lo tomaría como una buena señal, ya que tienen un montón de tráfico y parecen estar funcionando bien.

Hay pros y contras de usar Apache para hacer la redirección, pero el principal inconveniente es que es más fácil mantener la regla de reescritura en su código en lugar de en el servidor. Puede realizar correcciones e implementar rápidamente, en lugar de tener que cambiar y reiniciar todos los servidores Apache.

contestado el 16 de mayo de 11 a las 22:05

¡Gracias! ¿Puedo configurar la cookie predeterminada (por ejemplo, "París") en Apache si el usuario no tiene una? - Per Sandström

Puede usar Set-Cookie que está documentado aquí httpd.apache.org/docs/2.3/mod/mod_headers.html, pero si yo fuera tú, lo haría en tu código. - toneplex

Reemplazo con el nombre de la cookie cuyo valor desea obtener. También algo que me hizo tropezar con esto fue que la referencia inversa% 1 solo funciona con el último RewriteCond, tenía una regla en el medio y no podía hacer que funcionara correctamente. - DrCord

¡También hay una manera de dar un valor predeterminado personalizado si no se establece ninguna cookie directamente en las reglas de reescritura!

El% 1 siempre se refiere al último RewriteCond evaluado! Si se encuentra una cookie, la segunda RewriteCond se ignora. Si no se encuentra ninguno, se evalúa el segundo. ¡Todo lo que hace es dar un valor y luego igualar este valor total!

RewriteEngine on
RewriteCond %{HTTP_COOKIE} cookiename=([^;]+) [OR]
RewriteCond defaultvalue (.*)
RewriteRule ^(.*)$ /mypath/%1 [L,R=302]

Puedes agregar otro RewriteCond cheques, pero estas tienen que ser las dos últimas líneas antes del final RewriteRule

Respondido el 13 de enero de 15 a las 12:01

<?php
    $city = $_COOKIE['city'];

    header("Location: mydomain.com/reviews/".$city);
?>

No es necesario configurar Apache.

contestado el 16 de mayo de 11 a las 22:05

Gracias por su respuesta, pero prefiero quedarme fuera de PHP para esto. Estoy usando HTML estático para páginas almacenadas en caché para usuarios anónimos. Olvidé mencionar eso, lo siento… - Per Sandström

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.