
Necesito reescribir la URL desde
us.example.com
a
example.com?country=us
sin subdominios
Probé estas 2 reglas:
1.
RewriteRule (US|EG) ?c=$1 [NC , L]
2.
RewriteRule :\/\/(.*?).example.com ?C=$1 [NC , L]
pero no funcionaron.
entonces... ¿hay alguna manera de hacer esto?
Respuesta1
No se puede "reescribir" una URL entre diferentes nombres de host (necesitaría implementar un proxy inverso) y supongo que una "redirección" no es deseable.
Sin embargo, si los subdominios y el dominio principal apuntan todos a la misma área del sistema de archivos, entonces no es necesario cambiar el nombre de host/dominio. Todo lo que se requiere es una reescritura normal (en el mismo host).
Para verificar el subdominio en el host solicitado, necesita una condición ( RewriteCond
directiva) que verifique la HTTP_HOST
variable del servidor (es decir, el valor del Host
encabezado de solicitud HTTP). ElRewriteRule
patróncoincide únicamente con la parte de la ruta URL de la URL.
Por ejemplo:
RewriteEngine On
RewriteCond %{QUERY_STRING} !^country=
RewriteCond %{HTTP_HOST} ^(us|eg)\.example\.com [NC]
RewriteRule ^ /?country=%1 [L]
Como se señaló anteriormente, esto supone que los subdominios y el dominio principal apuntan a la misma área del sistema de archivos. Esto es común en un sistema donde todas las solicitudes son administradas por un único CMS. (Y no está intentando cambiar el nombre de host en sus directivas de ejemplo).
La %1
referencia inversa contiene el subdominio ("nosotros" o "por ejemplo", en este ejemplo) del nombre de host solicitado.
La condición adicional que verifica la ausencia del country=
parámetro URL en la cadena de consulta es evitar un bucle de reescritura.
Sin embargo, ¿no ha dicho nada sobre la ruta URL? Y debería reescribir directamente en el archivo que maneja la solicitud ( index.php
?). En su estado actual, la "reescritura" anterior depende de que mod_dir realice una subsolicitud adicional para DirectoryIndex.
RewriteRule (US|EG) ?c=$1 [NC , L]
RewriteRule :\/\/(.*?).example.com ?C=$1 [NC , L]
Existen numerosos errores con estas directivas:
- Dices que has probado estos, sin embargo, el errorespaciosen elbanderasEl argumento dará como resultado un error interno del servidor 500 inmediato cuando el archivo se analice por primera vez.
- Como se mencionó anteriormente, el
RewriteRule
patrón(primer argumento) coincide únicamente con la ruta URL. Esto no incluye el nombre de host. - La expresión regular en el n.° 1 es demasiado general y coincide con "US" o "EG"en cualquier lugar.
- Para hacer coincidir con una URL absoluta (como parece que está intentando hacer en el segundo ejemplo), deberá hacer coincidir con
THE_REQUEST
la variable del servidor (que contiene la primera línea de los encabezados de la solicitud, incluya la solicitudmétodo).