Posso fazer um if/então/else em htaccess?
-
22-07-2019 - |
Pergunta
Eu tenho um site que serve certos conteúdos com base no subdomínio. Portanto, é o mesmo conjunto de arquivos, e talvez o cabeçalho e algumas informações nas páginas do site mudem com base no subdomínio.
Preciso ter autenticação diferente do HTPassword com base no subdomínio, mas não consigo encontrar informações sobre como fazer um tipo se/então tipo de coisa no htaccess.
Basicamente, o que eu preciso é isso:
Se subdomínio = 'abc' use este arquivo htpassword
Se subdomain = 'def' use este arquivo htpassword
Isso pode ser feito?
Solução
Tente algo assim:
SetEnvIf Host ^abc\. HOST_ABC
SetEnvIf Host ^dev\. HOST_DEF
<IfDefine HOST_ABC>
AuthUserFile …
</IfDefine>
<IfDefine HOST_DEF>
AuthUserFile …
</IfDefine>
Outras dicas
Qual servidor da web você está usando?
Uma técnica que pode funcionar em vários servidores diferentes (certamente funciona no Apache) é ter um arquivo .htaccess diferente no diretório correspondente a cada subdomínio.
Se fosse eu (e não pensei em fazer isso antes) eu faria:
- Use um redirecionamento interno usando mod_rewrite para diferentes raízes do site (/suba ou/subb), dependendo de alguns fatores (emulando se/else)
- Usar Symblinks no diretório público, mas não o .htaccess
assim:
/sites/subdomain_a/.htaccess
/sites/subdomain_a/pub
/sites/subdomain_b/.htaccess
/sites/subdomain_b/pub
Onde
/sites/subdomain_a/pub == /sites/subdomain_b/pub
usando
ln -s
ou similar. Em seguida, use mod_rewrite para redirecionar (internamente) para a raiz do site correta. EU acho Mod_rewrite é executado antes da carga .htaccess.
Isso significa que você está atendendo efetivamente aos mesmos arquivos do site com um .htaccess diferente, dependendo do subdomínio.
Espero que isso ajude, um pouco de hack.
Estaria interessado em ver se algo melhor existe.
Você não pode usar se/else porque htaccess não é uma lista de instruções. Mas, se você usar um bloco condicional comou003CIfModule mod_rewrite.c> ouu003CIfDefine something> , você pode usar diretivas diferentes com base em qual subdomínio está sendo solicitado. Não tenho certeza de qual você usaria ...
Você também pode colocar um arquivo .htaccess um nível acima dos arquivos e usaru003CDirectory something> Para especificar regras diferentes para cada subdomínio, mas faça com que os diretórios de subdomínio sejam sintiais para o mesmo diretório com os arquivos compartilhados.
Portanto, este seria o diretório acima das raiz (s) da web:
.htaccess
Sitefiles
Subdomain1 (Symlink parafiles do site)
Subdomain2 (símbolo para os arquivos do site)
...