2009-08-05 16 views
7

Ho un sito che serve determinati contenuti in base al sottodominio. Quindi è lo stesso insieme di file, e forse l'intestazione e alcune informazioni nelle pagine del sito cambiano in base al sottodominio.Posso fare un if/then/else in htaccess?

Ho bisogno di avere un'altra autenticazione htpassword basata anche sul sottodominio, ma non riesco a trovare informazioni su come fare un if/then tipo di cosa in htaccess.

Fondamentalmente quello che serve è questo:

se sottodominio = 'abc' uso questo file htpassword

se sottodominio = 'def' uso questo file htpassword

Può questo essere fatto?

risposta

3

Prova qualcosa del genere:

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

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

Questo sembra fantastico - ho finito per dover semplicemente creare un'autenticazione semplice in PHP a causa di limiti di tempo, ma mi piacerebbe provare questo in un ambiente di test in quanto sembra avere un senso. Grazie! – user151257

+5

affascinante quanto sembra, non ha funzionato per me. vorresti rivedere questo Gumbo? – Devrim

0

quale server web stai usando?

una tecnica che può funzionare su diversi server diversi (funziona sicuramente in apache) consiste nell'avere un diverso file .htaccess nella directory corrispondente a ciascun sottodominio.

+0

Secondo la domanda come postata, è lo stesso insieme di file, quindi non ci sono direc separati Tories. – Amber

+0

È un server Win 2003 che utilizza IIS con password IIS e ISAPIrewrite3. La tua soluzione non funzionerà perché non ci sono fisicamente diversi set di file nel filesystem per i sottodomini - tutti i sottodomini puntano allo stesso set di file e il PHP valuta il sottodominio e mostra diversi dati basati su questo. Grazie .. – user151257

0

Se fossi stato (e non ho pensato di farlo prima) io:

  1. Utilizzare un reindirizzamento interno utilizzando mod_rewrite a diverse radici sito (/ Suba o/Subb) a seconda alcuni fattori (emulando if/else)
  2. Usa link simbolici sulla directory pubblica, ma non la .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 

utilizzando

ln -s 

o simile. Quindi utilizzare mod_rewrite per reindirizzare (internamente) alla radice del sito corretta. I think mod_rewrite viene eseguito prima che .htaccess sia caricato.

Ciò significa che stai effettivamente servendo gli stessi file del sito con un diverso .htaccess a seconda del sottodominio.

Spero che questo aiuti, un po 'un trucco.

Sarebbe interessato a vedere se qualcosa di meglio esiste.

0

Non è possibile utilizzare if/else perché htaccess non è un elenco di istruzioni. Ma, se si utilizza un blocco condizionale come < IfModule mod_rewrite.c > o < IfDefine qualcosa >, è possibile utilizzare direttive diverse in base a quale sottodominio viene richiesto. Non sono sicuro di quale si possa usare ...

Si potrebbe anche mettere uno.htaccess archivia un livello sopra i file e usa la directory < per specificare > per specificare regole diverse per ogni sottodominio, ma fai in modo che tutte le directory di sottodominio siano symlink nella stessa directory con i file condivisi.

quindi questa sarebbe la directory sopra la radice web (s):
.htaccess
sitefiles
Subdomain1 (collegamento simbolico a sitefiles)
subdomain2 (collegamento simbolico a sitefiles)
...

Problemi correlati