Internal MorRewrite funktioniert nicht

Apache, Lighttpd, nginx, Cherokee
fireball
Posts: 13
Joined: 2006-01-06 11:22

Internal MorRewrite funktioniert nicht

Post by fireball » 2008-07-18 23:20

Hallo,
auf meinem Webserver würde ich gerne einen internen rewrite machen, damit oben im Browser immer noch die eigentliche URL angezeigt wird. Leider klappt das irgendwie nicht. Muss ich noch irgendwas dazu einstellen? Hier mal meine config.

Code: Select all

RewriteEngine On
RewriteCond %{REQUEST_URI} !.(gif|jpe?g|png|jspx?|css|js)$
RewriteRule ^/(.*)$ http://localhost/index.jspx?user=$1 [NC,L]

Sprich, wenn oben einer http://localhost/fireball eingibt lande ich intern auf http://localhost/index.jspx?user=fireball und oben steht immer noch http://localhost/fireball (soweit die Theorie).
Das klappt aber nicht und ich lande immer auf http://localhost/index.jspx?user=fireball ](*,)

Eine kleine Besonderheit ist wohl noch, dass der Apache alles an einen Tomcat weiterleitet. Aber auch, wenn ich den Tomcat Connector auskommentier funktioniert der Redirect nicht richtig.

Hier das Logfile

Code: Select all

127.0.0.1 - - [18/Jul/2008:23:15:46 +0200] [localhost/sid#39a120][rid#3dd970/initial] (2) init rewrite engine with requested uri /fireball
127.0.0.1 - - [18/Jul/2008:23:15:46 +0200] [localhost/sid#39a120][rid#3dd970/initial] (3) applying pattern '^/(.*)$' to uri '/fireball'
127.0.0.1 - - [18/Jul/2008:23:15:46 +0200] [localhost/sid#39a120][rid#3dd970/initial] (4) RewriteCond: input='/fireball' pattern='!.(gif|jpe?g|png|jspx?|css|js)$' => matched
127.0.0.1 - - [18/Jul/2008:23:15:46 +0200] [localhost/sid#39a120][rid#3dd970/initial] (2) rewrite '/fireball' -> 'http://localhost/index.jspx?user=fireball'
127.0.0.1 - - [18/Jul/2008:23:15:46 +0200] [localhost/sid#39a120][rid#3dd970/initial] (3) split uri=http://localhost/index.jspx?user=fireball -> uri=http://localhost/index.jspx, args=referrer=fireball
127.0.0.1 - - [18/Jul/2008:23:15:46 +0200] [localhost/sid#39a120][rid#3dd970/initial] (2) implicitly forcing redirect (rc=302) with http://localhost/index.jspx
127.0.0.1 - - [18/Jul/2008:23:15:46 +0200] [localhost/sid#39a120][rid#3dd970/initial] (1) escaping http://localhost/index.jspx for redirect
127.0.0.1 - - [18/Jul/2008:23:15:46 +0200] [localhost/sid#39a120][rid#3dd970/initial] (1) redirect to http://localhost/index.jspx?user=fireball [REDIRECT/302]
127.0.0.1 - - [18/Jul/2008:23:15:46 +0200] [localhost/sid#39a120][rid#3e3988/initial] (2) init rewrite engine with requested uri /index.jspx
127.0.0.1 - - [18/Jul/2008:23:15:46 +0200] [localhost/sid#39a120][rid#3e3988/initial] (3) applying pattern '^/(.*)$' to uri '/index.jspx'
127.0.0.1 - - [18/Jul/2008:23:15:46 +0200] [localhost/sid#39a120][rid#3e3988/initial] (4) RewriteCond: input='/index.jspx' pattern='!.(gif|jpe?g|png|jspx?|css|js)$' => not-matched
127.0.0.1 - - [18/Jul/2008:23:15:46 +0200] [localhost/sid#39a120][rid#3e3988/initial] (1) pass through /index.jspx


Hat jemand von euch eine Idee warum er keinen internen Redirect macht?
Und warum wird für index.jspx nochmal die Regel aufgerufen? Ich hatte das so verstanden, dass [L] die Riderect Bearbeitung beendet.

dtdesign
RSAC
Posts: 395
Joined: 2006-09-05 21:12
Location: Berlin

Re: Internal MorRewrite funktioniert nicht

Post by dtdesign » 2008-07-20 03:35

Die Flag "[L]" bedeutet jeglich, dass gemäß dem Falle das die obige Bedingung zutrifft, keine der - falls vorhanden - folgenden Regeln beachtet werden. Dadurch, das ein Redirect statt findet, wird die aufgerufene URL natürlich erneut durch mod_rewrite ausgewertet. Das Verhalten ist eigentlich richtig, bis auf die Tatsache, dass man weitergeleitet wird.

modrewrite.de ist ein relativ solides Nachschlagwerk für Apaches mod_rewrite, dort wird auch der genaue Syntax erklärt.

Gruß
dtdesign