Thread mod_rewrite und logische Fallunterscheidung (15 answers)
Opened by cbxk1xg at 2004-04-16 16:31

jan
 2004-04-17 18:48
#30697 #30697
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
nein, ich glaube nicht, dass mod_rewrite und perl regexp gleich sind. ähnlich, aber nicht unbedingt gleich. leider.
du kannst natürlich \.htm einfach herausnehmen, musst dann aber noch eine zusätzliche bedingung aufnehmen, die sicherstellt, dass es nicht dein script ist, das aufgerufen wird, sonst baust du dir eine potentielle endlosschleife ein, weil jeder request umgeleitet würde, auch der interne zugriff auf dein script - und schon geht's unendlich so weiter.

stimmt, an sich sollte [L] dafür sorgen, dass keine weiteren Rules mehr angewendet werden - aber nur in diesem request, d.h. die rewriteengine erzeugt ja intern einen neuen request mit dem umschreiben und der kann dann natürlich wieder umgeschrieben werden, wenn ich das konzept richtig verstanden habe.

wieso sollte $1 das ergebnis der letzten regel enthalten? $1 enthält die ersten, matchenden, geklammerten werte aus der letzten RewriteRule-Zeile - aber da hast du keine Klammerung. ich denke immer noch, dass du rewriten und prüfen in einer rule laufen lassen solltest.
gehen wir einen schritt zurück zu
Code: (dl )
1
2
3
4
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{REQUEST_URI} .*/([^/]+\.htm)$
#RewriteCond /-/Cache/%1 -s
RewriteRule .* /-/Cache/%1 [L]


ich tippe, dass der grund, warum das ganze nicht matcht, einfach darin liegt, dass /-/Cache/ nicht existiert, und damit natürlich dann auch keine Datei darin. -s testet, meine ich, den lokalen pfad, d.h. man müsste noch das DOCROOT davor setzen, um den gewünschten Effekt zu erzielen. etwa so:

Code: (dl )
1
2
3
4
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{REQUEST_URI} .*/([^/]+\.htm)$
RewriteCond %{DOCUMENT_ROOT}/-/Cache/%1 -s
RewriteRule .* /-/Cache/%1 [L]



wie sieht's damit aus?
selbiger ansatz müsste dann auch für deinen letzten ansatz gelten:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
RewriteCond %{REQUEST_METHOD} GET
RewriteCond %{REQUEST_URI} .*/([^/]+\.htm)$
RewriteRule .* -/Cache/%1

# "$1" enthält das Ergebniss der letzten Regel und
# schreibt alles ".*" um auf "$1", wenn es existiert. Hossa!
RewriteCond %{DOCUMENT_ROOT}/$1 -s
RewriteRule .* $1 [L]

# Hier sollte Testweise alles was nicht matched
# eine andere Aktion auslösen. - GEHT ABER NICHT!
RewriteCond %{DOCUMENT_ROOT}/$1 !-s
RewriteRule .* http://foo.bar/ [L]


wobei ich immer noch an $1 zweifle.

View full thread mod_rewrite und logische Fallunterscheidung