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?

È stato utile?

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:

  1. Utilizza un reindirizzamento interno utilizzando mod_rewrite su diverse radici del sito (/ suba o / subb) a seconda di alcuni fattori (emulazione IF / ELSE)
  2. 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)
...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top