2010-04-09 23 views
7

Ich habe einen Apache im Frontend, der eine Anfrage über eine Rewrite-Regel umleitet. Ich habe eine grundlegende Authentifizierung setzen, bevor eine Anforderung umleiten, so dass ich dies in der Konfigurationsdatei:Apache: grundlegende Authentifizierung vor dem Umschreiben

<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> 

aber nicht funktioniert.

Irgendwelche Vorschläge?

+0

Was haben Sie erwartet? Was wirklich passierte? Was hast du getan, um es zu verwirklichen? Was hast du noch versucht? –

+0

Ich würde erwarten, dass alle Anfragen nach der Authentifizierung würden mit der Regel umgeleitet werden RewriteRule ^/(. *) Http: // xxxxxx: xxx/$ 1 [P, L] aber dies geschieht nicht Apache suchen Sie die Seite unter/var/www/html – pyro

Antwort

5

Ich löste das Umschreiben Zustand zu versetzen und neu schreiben Regel außerhalb der Locatio Richtlinie:

<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] 

vielen Dank für die Anregung h0tw1r3

* Beachten Sie, dass Location Richtlinien über URLs arbeiten, und nicht Verzeichnisse. Das bedeutet, wenn jemand einen Alias ​​für den Dokumentenstamm erstellt, werden diese Authentifizierungsregeln vollständig umgangen. (Siehe auch http://httpd.apache.org/docs/2.0/mod/core.html#location für mehr.)

2

Aktualisierung: Implizite Verzeichnisregel stellt sicher, dass die Validierung immer erforderlich ist, bevor das Neuschreiben durchgeführt wird. Es wurde festgestellt, dass verschiedene Kombinationen von Apache-Modulen das Verhalten änderten, daher funktioniert die angenommene Antwort möglicherweise nicht immer.

<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 es funktioniert nicht :(. apache weiter die Seite lokal zu suchen – pyro

+0

Kürzlich kam das wieder auf, sogar Pyro akzeptierte Antwort funktionierte nicht für mich auf Apache 2.2.22 (Ubuntu). – h0tw1r3

10

Im Allgemeinen führt Apache vor der Autorisierungsphase die Neuschreibphase aus, weshalb Ihr Code das Neuschreiben durchführt, ohne dass der Benutzer zur Authentifizierung aufgefordert wird.

Sie können dies mit der LA-U:REMOTE_USER Variable umgehen. Vorwort Ihre RewriteRule mit einer Bedingung, die nach vorne blickt („LA“) an die Genehmigungsphase:

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

Notizen darüber Siehe in http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond

Wie andere Plakate weisen darauf hin, es ist auch besser, die RewriteRule Richtlinien zu nehmen aus dem Block, damit sie zuverlässiger sind.

Verwandte Themen