Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

324
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!