Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

331
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda