2010-04-09 4 views
7

Ho un apache in frontend che reindirizza una richiesta tramite una regola di riscrittura. devo mettere un'autenticazione di base prima di reindirizzare una richiesta, così ho messo questo nel file di configurazione:apache: autenticazione di base prima di riscrivere

<VirtualHost *:443> 
    ServerAdmin xxxxxx 
    DocumentRoot /var/www/html/ 
    ServerName xxxxxxx 
    RewriteEngine on 
    ErrorLog logs/error.log 
    CustomLog logs/access_log common 

    <Directory /var/www/html/> 
     AuthType Basic 
     AuthName "Restricted Files" 
     AuthUserFile /etc/httpd/conf/tag.pwd 
     Require valid-user 
     RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [P,L] 
    </Directory> 
</VirtualHost> 

ma non funziona.

Qualche suggerimento?

+0

Cosa ti aspettavi che accadesse? Cosa è successo realmente? Che cosa hai fatto per realizzarlo? Cos'altro hai provato? –

+0

Mi aspetto che tutte le richieste dopo l'autenticazione vengano reindirizzate con la regola RewriteRule ^/(. *) Http: // xxxxxx: xxx/$ 1 [P, L] ma ciò non accade Apache cerca la pagina sotto/var/www/html – pyro

risposta

5

ho risolto mettendo la condizione riscrittura e riscrivere regola al di fuori della direttiva Locatio:

<Location /> 
    AuthType Basic 
    AuthName "Restricted Files" 
    AuthUserFile /etc/httpd/conf/tag.pwd 
    Require valid-user 
</Location> 
RewriteCond %{LA-U:REMOTE_USER} !^$ 
RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [P,L] 

molte grazie per h0tw1r3 per il suggerimento

* Tenere presente che le direttive di localizzazione operano su URL, e non le directory. Ciò significa che se qualcuno crea un alias nella root del documento, ignorerà completamente queste regole di autenticazione. (Vedi http://httpd.apache.org/docs/2.0/mod/core.html#location per ulteriori informazioni.)

2

Aggiornamento: la regola di directory implicita garantisce che la convalida sia sempre necessaria prima che venga eseguita la riscrittura. Scoperto che diverse combinazioni di moduli apache hanno modificato il comportamento, quindi la risposta accettata potrebbe non funzionare sempre.

<Location /> 
    AuthType Basic 
    AuthName "Restricted Files" 
    AuthUserFile /etc/httpd/conf/tag.pwd 
    Require valid-user 
</Location> 

<Directory /documentroot> 
    RewriteCond %{LA-U:REMOTE_USER} (.+) 
    RewriteRule (.*) http://xxxxxx:xxx/$1 [P,L] 
</Directory> 
+0

mmm non funziona :(. apache continua a cercare la pagina localmente – pyro

+0

Recentemente questo è venuto di nuovo, anche la risposta accettata di pyro non è riuscita a funzionare per me su Apache 2.2.22 (Ubuntu). – h0tw1r3

10

In generale, Apache esegue la fase di riscrittura prima della fase di autorizzazione, motivo per cui il codice esegue la riscrittura senza chiedere mai all'utente di autenticarsi.

È possibile aggirare questo con la variabile LA-U:REMOTE_USER. Prefazione vostro RewriteRule con una condizione che guarda avanti ("Los Angeles") alla fase di autorizzazione:

RewriteCond %{LA-U:REMOTE_USER} !^$ 
RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [L] 

consultare le note di questo in http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond

Come altri utenti sottolineano, è anche meglio prendere le direttive RewriteRule fuori dal blocco in modo che siano più affidabili.