Pregunta

Tengo un sitio que sirve cierto contenido basado en el subdominio. Por lo tanto, es el mismo conjunto de archivos, y tal vez el encabezado y alguna información en las páginas del sitio cambian según el subdominio.

Necesito tener una autenticación htpassword diferente basada en el subdominio también, pero no puedo encontrar información sobre cómo hacer un tipo if / then de cosas en htaccess.

Básicamente lo que necesito es esto:

if subdominio = 'abc' usa este archivo htpassword

if subdominio = 'def' usa este archivo htpassword

¿Se puede hacer esto?

¿Fue útil?

Solución

Pruebe algo como esto:

SetEnvIf Host ^abc\. HOST_ABC
SetEnvIf Host ^dev\. HOST_DEF

<IfDefine HOST_ABC>
    AuthUserFile …
</IfDefine>
<IfDefine HOST_DEF>
    AuthUserFile …
</IfDefine>

Otros consejos

¿qué servidor web estás usando?

una técnica que puede funcionar en varios servidores diferentes (ciertamente funciona en apache) es tener un archivo .htaccess diferente en el directorio correspondiente a cada subdominio.

Si fuera yo (y no he pensado hacer esto antes):

  1. Use una redirección interna usando mod_rewrite a diferentes raíces del sitio (/ suba o / subb) dependiendo de algunos factores (emulando IF / ELSE)
  2. Use enlaces simbólicos en el directorio público, pero no el .htaccess

entonces:

/sites/subdomain_a/.htaccess
/sites/subdomain_a/pub
/sites/subdomain_b/.htaccess
/sites/subdomain_b/pub

donde

/sites/subdomain_a/pub == /sites/subdomain_b/pub

usando

ln -s

o similar. Luego use mod_rewrite para redirigir (internamente) a la raíz correcta del sitio. creo mod_rewrite se ejecuta antes de que se cargue .htaccess.

Esto significa que efectivamente está sirviendo los mismos archivos de sitio con un .htaccess diferente según el subdominio.

Espero que esto ayude, un poco hack.

Estaría interesado en ver si existe algo mejor.

No puede usar if / else porque htaccess no es una lista de instrucciones. Pero, si usa un bloque condicional como & Lt; IfModule mod_rewrite.c & Gt; o < IfDefine something > ;, puede usar diferentes directivas en función del subdominio que se solicita. Sin embargo, no estoy seguro de cuál usarías ...

También puede poner un archivo .htaccess un nivel por encima de los archivos y usar < Directory algo > para especificar diferentes reglas para cada subdominio, pero hacer que todos los directorios del subdominio sean enlaces simbólicos al mismo directorio con los archivos compartidos.

así que este sería el directorio arriba de la (s) raíz (s) web:
.htaccess
archivos del sitio
subdominio1 (enlace simbólico a archivos de sitio)
subdominio2 (enlace simbólico a archivos de sitio)
...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top