Posso fare un if / then / else in htaccess?
-
22-07-2019 - |
Domanda
Ho un sito che offre determinati contenuti in base al sottodominio. Quindi è lo stesso set di file e forse l'intestazione e alcune informazioni nelle pagine del sito cambiano in base al sottodominio.
Devo avere un'autenticazione htpassword diversa anche in base al sottodominio, ma non riesco a trovare informazioni su come eseguire un if / then type in htaccess.
Fondamentalmente quello di cui ho bisogno è questo:
se sottodominio = 'abc' usa questo file htpassword
se sottodominio = 'def' usa questo file htpassword
È possibile farlo?
Soluzione
Prova qualcosa del genere:
SetEnvIf Host ^abc\. HOST_ABC
SetEnvIf Host ^dev\. HOST_DEF
<IfDefine HOST_ABC>
AuthUserFile …
</IfDefine>
<IfDefine HOST_DEF>
AuthUserFile …
</IfDefine>
Altri suggerimenti
quale server web stai usando?
una tecnica che può funzionare su più server diversi (funziona sicuramente in apache) è quella di avere un diverso file .htaccess nella directory corrispondente a ciascun sottodominio.
Se fossi in me (e non avessi pensato di farlo prima) avrei:
- Utilizza un reindirizzamento interno utilizzando mod_rewrite su diverse radici del sito (/ suba o / subb) a seconda di alcuni fattori (emulazione IF / ELSE)
- Usa symlink nella directory pubblica, ma non .htaccess
così:
/sites/subdomain_a/.htaccess
/sites/subdomain_a/pub
/sites/subdomain_b/.htaccess
/sites/subdomain_b/pub
dove
/sites/subdomain_a/pub == /sites/subdomain_b/pub
con
ln -s
o simile. Quindi utilizzare mod_rewrite per reindirizzare (internamente) alla radice del sito corretta. Penso che mod_rewrite sia eseguito prima che venga caricato .htaccess.
Ciò significa che stai effettivamente offrendo gli stessi file del sito con un diverso .htaccess a seconda del sottodominio.
Spero che questo aiuti, un po 'di hack.
Sarebbe interessato a vedere se esiste qualcosa di meglio.
Non puoi usare if / else perché htaccess non è un elenco di istruzioni. Ma se usi un blocco condizionale come & Lt; IfModule mod_rewrite.c & Gt; oppure < IfDefine qualcosa > ;, è possibile utilizzare diverse direttive in base al sottodominio richiesto. Non sono sicuro di quale useresti se ...
Puoi anche mettere un file .htaccess di un livello sopra i file e usare < Directory qualcosa > per specificare regole diverse per ciascun sottodominio, ma fare in modo che le directory del sottodominio siano tutte collegamenti simbolici alla stessa directory con i file condivisi.
quindi questa sarebbe la directory sopra la (e) radice (e) web:
.htaccess
sitefiles
sottodominio1 (link simbolico ai file del sito)
sottodominio2 (link simbolico ai file del sito)
...