Regla de reescritura para manejar la excepción de URL

Tengo una aplicación que sirve a muchos sitios y estoy usando Apache mod-rewrite para mapear las URL de esta manera

http://site1.net/controller
http://site2.net/controller2/another_view
http://site3.net/
http://special_case.net/

mapas a:

index.php?url=http://site1.net/controller
index.php?url=http://site2.net/controller2/another_view
index.php?url=http://site3.net/
index.php?url=http://special_case.net/hub

Mis reglas de reescritura son:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

Que maneja todos los casos excepto el último caso especial, donde necesito forzar el uso de un controlador llamado "hub" cuando manejo un dominio específico. Colaboro con otros en este proyecto, lo que significa que no puedo hacer nada con respecto al enrutamiento una vez que se llama al archivo de índice.

¿Alguien puede arreglar mis reglas para que todos los casos anteriores se resuelvan?

preguntado el 21 de mayo de 12 a las 18:05

2 Respuestas

Sus reglas actuales no parecen agregar el nombre de host al parámetro de obtención de URL. Así que agregué eso a lo siguiente:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]

RewriteCond %{HTTP_HOST} ^(special_case\.net)$
RewriteRule ^(.*)$ index.php?url=http://%1/hub/$1 [QSA,L]

RewriteCond %{HTTP_HOST} ^(.*)$
RewriteRule ^(.*)$ index.php?url=http://%1/$1 [QSA,L]

contestado el 21 de mayo de 12 a las 19:05

¡Brillante! Podría simplificar mi caso de uso (me di cuenta de que no necesito capturar el nombre de host), así que no usé sus reglas palabra por palabra, pero obviamente usted es un maestro de reglas de reescritura y su respuesta me ayudó mucho. - jannie theunissen

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^http://special_case.net index.php?url=http://special_case.net/hub [QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]

contestado el 21 de mayo de 12 a las 19:05

La URL a la que se aplica el patrón de RewriteRule nunca contiene la cadena de consulta. Necesitarás usar algo como RewriteCond %{QUERY_STRING} url=http://special_case\.net - Gerben

Vaya, no entendí bien la pregunta original, prueba con la nueva respuesta. Esto debería captar el caso especial. - Carpeta de Steve

De nuevo; La URL a la que se aplica el patrón de RewriteRule nunca contiene el nombre de host. necesitas usar RewriteCond %{HTTP_HOST} ^(special_case\.net)$ para eso. Por favor, pruebe su código antes de publicar. - Gerben

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