mod_rewrite / RewriteRule greift nicht

Apache, Lighttpd, nginx, Cherokee
ulfl
Posts: 9
Joined: 2009-06-19 09:46

mod_rewrite / RewriteRule greift nicht

Post by ulfl » 2009-06-19 10:12

Hallo zusammen,

habe ein virtuellen Server mit openSuse 10.3 bei 1&1 gemietet. Auf Port 8080 läuft Tomcat, und Apache soll für Tomcat bestimmte Requests weiterleiten. Habe diese Anweisungen in /etc/apache2/vhosts.d/<host>.conf hinzugefügt, wie in der Dokumentation empfohlen wird.
Über ein Proxy-Anweisung funktioniert das auch, aber ich möchte per mod_rewrite eins der Webapps über ein hinzugefügter HTTP-Parameter mitteilen, ob HTTPS zum Einsatz kommt oder nicht. Habe deshalb folgendes meiner Konfiguration hinzugefügt:

Code: Select all

#
# Proxy-Anwesiungen. Diese funktionieren!
#

ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

# Auskommatiert, Weiterleitung soll über mod_rewrite laufen
#ProxyPass         /photos  http://localhost:8080/photos
#ProxyPassReverse  /photos  http://localhost:8080/photos

ProxyPass         /nibdab  http://localhost:8080/nibdab
ProxyPassReverse  /nibdab  http://localhost:8080/nibdab


#
# Rewrite-Anweisungen. Diese greifen nicht.
#
RewriteEngine on

# Rewrite soll nur gemacht werden, falls Pfad /photos/ beinhaltet
RewriteCond %{REQUEST_URI} ^/photos/
# Parameter "ssl" nur hinzugügen, falls nicht schon vorhanden
RewriteCond %{QUERY_STRING} !^.*ssl= [NC]
# Parameter "ssl=on/off" wird hinzugefügt
RewriteRule ^/photos/(.*)$ http://localhost:8080/photos/$1?ssl=%{HTTPS} [QSA,P,L]



Diese Anweisung funktioniert auf mein (Windows-)Entwicklungsrechner wie erwartet. Vermutlich habe ich bezüglich der Linux-Apache-Konfiguration irgendwas übersehen bzw falsch verstanden. mod_rewrite ist installiert, wenn ich Apache neu starte wird auf der Konsole geschrieben:

Code: Select all

 Starting httpd2 (prefork) [Fri Jun 19 09:39:03 2009] [warn] module rewrite_module is already loaded, skipping


Irgendwo scheint eine doppelte Include-Anweisung für mod_rewrite zu sein, aber normalerweise müsste doch dies bedeuten, das mod_rewrite aktiv ist, oder? Hat jemand eine Idée?

Viele Grüsse,
Ulf

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: mod_rewrite / RewriteRule greift nicht

Post by daemotron » 2009-06-19 12:12

Die Warnung bezieht sich tatsächlich darauf, dass LoadModule für mod_rewrite zwei Mal auftaucht. Das hat aber keinen Einfluss darauf, ob Rewriting funktioniert oder nicht.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

ulfl
Posts: 9
Joined: 2009-06-19 09:46

Re: mod_rewrite / RewriteRule greift nicht

Post by ulfl » 2009-06-19 17:26

Vielleicht um mein Problem deutlicher zu formulieren:

Wenn ProxyPass eingeschaltet ist, bekomme ich über die Adresse http://<host>/photos/<pfad> tatsächlich Zugriff auf Tomcat.

Wenn dagegen die RewriteRule eingeschaltet ist, bekomme ich bei derselben Adresse eine 404-Antwort von Apache.

Dankbar, wenn jemand dazu was einfällt.

//Ulf

rob.
Posts: 7
Joined: 2009-04-24 14:55

Re: mod_rewrite / RewriteRule greift nicht

Post by rob. » 2009-06-19 22:54

UlfL wrote:Wenn dagegen die RewriteRule eingeschaltet ist, bekomme ich bei derselben Adresse eine 404-Antwort von Apache.

Was findest du denn in deiner RewriteLog?


matzewe01 wrote:(Mind. aber ProxyRequest on)
Aber nicht, wie hier, für einen Reverse-Proxy. Wir wollen ja nicht ohne Not das Tor für einen Forward-Proxy öffnen.
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxyrequests wrote:In a typical reverse proxy or gateway configuration, this option should be set to Off.

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: mod_rewrite / RewriteRule greift nicht

Post by Roger Wilco » 2009-06-19 23:32

Benutze mod_jk oder mod_proxy_ajp, dann kannst du dir den Hack mit mod_rewrite zur Ermittlung ob die Verbindung via HTTPS zustande kam sparen.

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: mod_rewrite / RewriteRule greift nicht

Post by daemotron » 2009-06-20 06:53

matzewe01 wrote:Auf Suse bedeutet das, /etc/sysconfig/apache anpassen dort in der Liste der zu ladenden Module rewrite und proxy_http eintragen. Apache neu starten / reloaden.

mod_proxy ist beim OP bestimmt enabled, sonst würden die ProxyPass-Direktiven nicht funktionieren... btw. was die verschiedenen mod_proxy-Module anbelangt: normalerweise reicht mod_proxy, nur wenn man sehr spezielle Dinge wie etwa das Terminieren einer SSL-Verbindung tun möchte, benötigt man mod_proxy_http.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

rob.
Posts: 7
Joined: 2009-04-24 14:55

Re: mod_rewrite / RewriteRule greift nicht

Post by rob. » 2009-06-20 16:11

jfreund wrote:
matzewe01 wrote:normalerweise reicht mod_proxy, nur wenn man sehr spezielle Dinge wie etwa das Terminieren einer SSL-Verbindung tun möchte, benötigt man mod_proxy_http.


Seit Apache 2.2 geht ohne mod_proxy_http auch keine „normale“ http-Anfrage zu einem backend mehr. Der eigentliche Proxy-Vorgang zum externen Server ist über scheme_handler implementiert und diese werden nur von den Modulen mod_proxy_xyz bereitgestellt. Ansonsten wird die Error_log-Datei mit "proxy: No protocol handler was valid for the URL...." geflutet. So ein Gefrickel, wie es das mal mit dem HTTP-Protokoll im Core gab (mittlerweile weitgehend entzerrt, irgendwann vielleicht auch mal als mod_http zuladbar), wurde vermieden.

Diese Module müssen aber beim OP geladen sein, da sonst
a) ProxyPass schon nicht funktioniert hätte
b) beim Fehlen von mod_proxy mod_rewrite einen HTTP 403 ausgeworfen hätte
c) beim Fehlen von mod_proxy_http mod_proxy einen HTTP 500 ausgeworfen hätte.

Ein HTTP 404 kann den OP nur treffen, wenn
a) die RewritRules gar nicht erst ausgeführt werden
b) die Bedingungen (rule-pattern, conditions) nicht erfüllt sind und entspr. kein rewrite auf die Substitution stattfindet.

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: mod_rewrite / RewriteRule greift nicht

Post by daemotron » 2009-06-20 17:16

Rob. wrote:Seit Apache 2.2 geht ohne mod_proxy_http auch keine „normale“ http-Anfrage zu einem backend mehr.

Mea culpa, Du hast natürlich recht - ich war gedanklich irgendwo bei mod_proxy_connect :oops:
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

ulfl
Posts: 9
Joined: 2009-06-19 09:46

Re: mod_rewrite / RewriteRule greift nicht

Post by ulfl » 2009-06-22 09:39

Danke für eure Antworten. Mit mod_proxy habe ich keine Probleme, die ProxyPass-Direktive funktionieren wie erwartet. Normalerweise müsste doch auch die RewriteRule auch funktionieren, mod_rewrite scheint ja geladen zu sein.
Unter /var/log/apache2/ gibt es kein Rewrite-log.

ulfl
Posts: 9
Joined: 2009-06-19 09:46

Re: mod_rewrite / RewriteRule greift nicht

Post by ulfl » 2009-06-22 10:14

Wenn ich

Code: Select all

RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 9

hinzufüge, Apache neu starte und die Seite im Browser aufrufe, wird in der Log-Datei rewrite.log nichts geschrieben. Aber immerhin wird die Datei angelegt.

rob.
Posts: 7
Joined: 2009-04-24 14:55

Re: mod_rewrite / RewriteRule greift nicht

Post by rob. » 2009-06-22 15:06

UlfL wrote:Wenn ich

Code: Select all

RewriteLog /var/log/apache2/rewrite.log
RewriteLogLevel 9

hinzufüge, Apache neu starte und die Seite im Browser aufrufe, wird in der Log-Datei rewrite.log nichts geschrieben. Aber immerhin wird die Datei angelegt.


D.h. die Regeln werden nicht durchlaufen. Die Anfrage läuft aber nicht in einen <virtualhost> und die RewriteRules sind außerhalb des virtualhosts notiert?

ulfl
Posts: 9
Joined: 2009-06-19 09:46

Re: mod_rewrite / RewriteRule greift nicht

Post by ulfl » 2009-06-22 17:18

Rob. wrote:Die Anfrage läuft aber nicht in einen <virtualhost> und die RewriteRules sind außerhalb des virtualhosts notiert?

Das wahr wohl das Problem. Die RewriteRules waren ausserhalb eines virtualhosts notiert. Um sie für einen bestimmten virtualhost zu aktivieren, muss man innerhalb eines virtualhosts folgendes notieren:

Code: Select all

<VirtualHost <ip-adresse>:80>
   ...
   RewriteEngine On
   RewriteOptions Inherit
   ...
</VirtualHost>

Damit funktioniert das Ganze jetzt. Danke für den Tipp! :-D
Viele Grüsse,
Ulf