2009-08-31 6 views
8

Ho diversi siti: example.com, example1.com e example2.com. Tutti puntano alla cartella /public_html del mio server, che è la mia cartella radice di Apache.Utilizza autenticazione HTTP solo se si accede a un dominio specifico

Cosa devo aggiungere al mio file .htaccess per utilizzare l'autenticazione http solo se l'utente proviene da example2.com? example.com e example1.com NON devono usare l'autenticazione.

so che ho bisogno qualcosa come

AuthType Basic 
AuthName "Password Required" 
AuthUserFile "/path/to/.htpasswd" 
Require valid-user 

ma voglio soltanto per richiedere una password se l'utente sta visitando example2.com.

Modifica

Utilizzando un approccio suggerito in una risposta, ho il seguente nel mio file .htaccess:

SetEnvIfNoCase Host ^(.*)$ testauth 
<IfDefine testauth> 
RewriteRule ^(.*)$ index2.php?q=$1 [L,QSA] 
</IfDefine> 

So che il modulo mod_setenvif.c è abilitato (ho verificato con un blocco IfModule <, ma sembrerebbe che "testauth" non viene mai definito, perché il mio test per verificare (reindirizzamento a index2.php) non è in esecuzione (mentre veniva eseguito nel mio blocco < IfModule>). Qualche idea, perché?

+0

Se tutti i domini siano rivolte al stesso posto, perché vorresti proteggere solo uno di loro? Se in realtà offri contenuti diversi, perché non hai un approccio saner come una cartella per dominio? –

+0

Sto eseguendo un'installazione Drupal multisito dalla mia cartella/public_html e voglio creare un'autenticazione HTTP coperta su uno dei siti, oltre al normale accesso utente di quel sito. –

+0

Il multisito di Drupal mi consente di eseguire diversi siti Web con lo stesso set di file PHP, ma con database diversi (così diversi contenuti). Potrei fare una seconda installazione in una sottocartella, ma ciò richiederebbe il mantenimento di serie distinte di file e moduli. –

risposta

1

Non si dovrebbe mettere la configurazione per-vhost in .htaccess. Invece, metti il ​​blocco di configurazione nel blocco VirtualHost nel file di configurazione appropriato in /etc/apache/sites-enabled/*.

+0

Purtroppo non ho accesso ai file vhost. Sto eseguendo tutto questo su un server di hosting condiviso tramite CPanel. = ( –

2

Mi chiedo se DanH potrebbe essere aiutato da un approccio che consente l'accesso per indirizzo IP?

Qualcosa di simile

SetEnvIf Remote_Addr 1\.2\.3\.4 AllowMeIn 
SetEnvIfNoCase Host this\.host\.is\.ok\.com AllowMeIn 
SetEnvIfNoCase Host this\.host\.is\.also\.ok\.com AllowMeIn 

e poi nel vostro Drupal "contenitore"

Order Allow,Deny 
Allow from env=AllowMeIn 

dovrebbe fare il trucco.

Qualsiasi host che è "live" deve essere configurato su "AllowMeIn", oppure è necessario che provenga da un indirizzo IP noto (ad es. Tu e altri sviluppatori).

+0

Perfetto funziona grazie premio sarà in 4 ore – DanH

16

ne dite qualcosa sulla falsariga di questo nel file .htaccess nella root del documento:

# set the "require_auth" var if Host ends with "example2.com" 
SetEnvIfNoCase Host example2\.com$ require_auth=true 

# Auth stuff 
AuthUserFile /var/www/htpasswd 
AuthName "Password Protected" 
AuthType Basic 

# Setup a deny/allow 
Order Deny,Allow 
# Allow for everyone 
Allow from all 
# Except if a auth is required 
Deny from env=require_auth 
# But if you have a user you are welcome 
Require valid-user 
# Auth OR access, not AND https://wiki.apache.org/httpd/BypassAuthenticationOrAuthorizationRequirements 
Satisfy any 

In questo modo sarà quindi l'autenticazione non è richiesta a meno che il padrone di casa si conclude con example2.com (ad esempio www.example2.com, dev.example2.com, ecc). L'espressione può essere ottimizzata se necessario. Qualsiasi altro host causerà la deviazione del valore require_auth var in modo che l'autenticazione sia non richiesta. Se questo dovesse essere il contrario, l'ultima riga potrebbe essere cambiata in: Allow from env=require_auth, rimuovendo lo !.

+2

Per me require_auth non funziona, ma questo:!! Consentire da tutto Deny da env = require_auth Richiede valid-user conformarsi a qualunque –

+0

ringrazio molto –

+0

gli utenti potrebbero essere in grado di sfruttarlo richiedendo "example2.com." (Notare il punto alla fine). Quindi la regola dovrebbe essere piuttosto "SetEnvIfNoCase Host esempio2 \ .com \.? $ ..." altrimenti il ​​contenuto potrebbe essere ancora visibile senza protezione. – Matmarbon

5

Ecco una raccomandazione:

creare un file chiamato common.conf e salvare in una posizione accessibile

In questo luogo il file di configurazione di Apache comune a tutti i siti (host).

La togliere la corrente ingresso singolo VirtualHost un sostituirli con voci VirtualHost come segue:

# These are the password protected hosts 
<VirtualHost *:80> 
ServerName example.com 
ServerAlias example1.com 

Include /path-to-common-configuration/common.conf 

AuthType Basic 
AuthName "Password Required" 
AuthUserFile "/path/to/.htpasswd" 
Require valid-user 
</VirtualHost> 

# These are hosts not requiring authentication 
<VirtualHost *:80> 
ServerName example2.com 
ServerAlias example3.com 

Include /path-to-common-configuration/common.conf 

</VirtualHost> 
1

Apache 2.4 offre un'alternativa semantica con la direttiva If:

<If "req('Host') == 'example2.com'"> 
    AuthUserFile /path/to/htpasswd 
    AuthType Basic 
    AuthName "Password Protected" 
    Require valid-user 
</If> 
<Else> 
    Require all granted 
</Else> 
Problemi correlati