Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

329
Vistas
La declaración .htaccess If/Else no funciona con HTTP_HOST

Este es mi archivo .htaccess :

 RewriteEngine On <If "%{HTTP_HOST} == '<myHost>'"> RewriteRule ^$ <url> [R=301,L] </If> <Else> RewriteRule ^$ <another_url> [R=301,L] </Else>

Pero no funciona y parece que se ignora la instrucción <If> . También hice un eco de $_SERVER['HTTP_HOST'] en PHP y ahí obtengo el valor que esperaba. Además, RewriteRule funciona si elimino la instrucción If/Else.

Estoy usando Azure Webapp con Apache/2.4.38 (Debian)

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Dentro del bloque if y else puede usar la directiva RedirectMatch ya que funciona con ella. RewriteRule no funciona porque anula y entra en conflicto con IF/ELSE.

 RewriteEngine On <If "%{HTTP_HOST} == '<myHost>'"> RedirectMatch 301 ^/$ https://example.com </If> <Else> RedirectMatch ^/$ https://example2.com </Else>
over 4 years ago · Santiago Trujillo Denunciar

0

La instrucción <If> no se ignora. El "problema" es que cuando se usa dentro de una expresión <If> , el patrón RewriteRule coincide con la ruta absoluta del sistema de archivos, no con la ruta URL solicitada que espera.

El bloque <If> cambia el orden de procesamiento. Los bloques <If> se fusionan muy tarde , después de que los archivos .htaccess se procesan normalmente y aparentemente después de que la solicitud se haya reasignado al sistema de archivos (es decir, después de que se haya agregado nuevamente el prefijo del directorio).

Con esto en mente, puede cambiar sus reglas a lo siguiente para que esto funcione:

 <If "%{HTTP_HOST} == '<myHost>'"> RewriteRule ^/file/path/to/document-root/$ <url> [R=301,L] </If> <Else> RewriteRule ^/file/path/to/document-root/$ <another_url> [R=301,L] </Else>

Donde /file/path/to/document-root/ es la ruta absoluta del sistema de archivos al directorio raíz de su documento (donde la ruta URL / se asigna a).

Como alternativa, verifique la ruta de la URL utilizando la variable de servidor REQUEST_URI en una condición. Por ejemplo:

 <If "%{HTTP_HOST} == '<myHost>'"> RewriteCond %{REQUEST_URI} =/ RewriteRule ^ <url> [R=301,L] </If> <Else> RewriteCond %{REQUEST_URI} =/ RewriteRule ^ <another_url> [R=301,L] </Else>

O bien, marque la REQUEST_URI en las expresiones <If> (y <ElseIf> ). En Apache 2.4.26+ puede anidar expresiones. Por ejemplo:

 <If "%{REQUEST_URI} == '/'"> <If "%{HTTP_HOST} == '<myHost>'"> RewriteRule ^ <url> [R=301,L] </If> <Else> RewriteRule ^ <another_url> [R=301,L] </Else> </If>

O use una directiva mod_alias RedirectMatch dentro de la expresión <If> , como se sugiere en la respuesta de @AmitVerma. Las directivas mod_alias RedirectMatch (y Redirect ) siempre hacen referencia a la ruta URL solicitada (relativa a la raíz), independientemente del contexto, por lo que no obtiene esta ambigüedad como con mod_rewrite.

O simplemente use mod_rewrite, no hay necesidad de la expresión <If> / <Else> aquí. por ejemplo:

 RewriteCond %{HTTP_HOST} =<myHost> RewriteRule ^$ <url> [R=301,L] RewriteRule ^$ <another_url> [R=301,L]
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda