rewrite rule rewritet unerklärlich - kombination von rewritecond
jobo
- webserver
Hallo,
rewritecond %{http_host} ^example.com [nc]
RewriteRule ^(test.*) http://example2.com/aa$1 [r=301,nc]
rewritecond %{http_host} ^example.com [nc]
rewriterule ^(.*)$ http://example2.com/test/$1 [r=301,nc]
ergibt bei example.com/test/xxx
in der adressezeile von browser:
http://example2.com/test/http://example2.com/aatest/xxx/xxx
Irgendwie addiert er die beiden rules, oder? Obwohl ja eine rewritecond vor dem zweiten Rule steht.
Wie kriege ich es denn hin, dass er, wenn example.com/test/bla aufgerufen wird, er nach example2.com/test/bla weiterleitet, wenn aber example.com/sonstwas/bla angefordert wird, er nach example2.com/test/sonstwas/bla weiterleitet?
Gruß
jobo
Hi!
Irgendwie addiert er die beiden rules, oder? Obwohl ja eine rewritecond vor dem zweiten Rule steht.
Ja, so sagt es auch das Handbuch: On the first RewriteRule it is applied to the URL-path of the request; subsequent patterns are applied to the output of the last matched RewriteRule.
Wenn du nicht willst, dass weitere Regeln berücksichtigt werden, musst du das Flag L verwenden.
Lo!
Hallo,
Ja, so sagt es auch das Handbuch: On the first RewriteRule it is applied to the URL-path of the request; subsequent patterns are applied to the output of the last matched RewriteRule.
Wenn du nicht willst, dass weitere Regeln berücksichtigt werden, musst du das Flag L verwenden.
Merci!
Gruß
jobo
Hallo,
zumindest hilft es, am Ende das Flag "L" einzubauen.
Ich dachte eigentlich, dass mit dem ersten Umschreiben die zweite Bedingung nicht mehr erfüllt wäre, das stimmt aber scheinbar nicht.
Hallo,
rewritecond %{http_host} ^example.com [nc]
RewriteRule ^(test.*) http://example2.com/aa$1 [r=301,nc]
http://example.com/test/xxx
ergibt dann wohl
http://example2.com/aatest/xxx
und wird dann nochmal rewritten (obwohl der http_host ja nicht mehr matchen sollte)
aus
http://example2.com/aatest/xxx
macht
rewritecond %{http_host} ^example.com [nc]
rewriterule ^(.*)$ http://example2.com/test/$1 [r=301,nc]
dann
http://example2.com/test/http://example2.com/aatest/xxx/xxx
wobei ich mich frage, wo die zweiten xxx da herkommen.
Gruß
jobo
Hi!
und wird dann nochmal rewritten (obwohl der http_host ja nicht mehr matchen sollte)
HTTP_HOST ist die Host-Zeile aus dem Request, und die ändert sich ja nicht. Also passt die Cond der zweiten Regel und letztere ja sowieso.
Lo!
Hallo,
HTTP_HOST ist die Host-Zeile aus dem Request, und die ändert sich ja nicht. Also passt die Cond der zweiten Regel und letztere ja sowieso.
Macht Sinn.
Ich möchte gerne, dass die alte Domain via subomdain alt.example.com weiter zugänglich ist, aber passwortgeschützt.
Wenn ich
AuthType Basic
AuthName "My Protected Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
Nach den Rewrite-Rules schreibe, dann will er das Passwort in jedem Fall, egal, ob eigentlich nach example2.com gerewritten werden soll oder nicht.
Kann ich da eine Bedingung einbauen? Nur wenn die Subdomain alt.example.com aufgerufen wird, bitte den Passwortschutz aktivieren? Sonst einfach nach der neuen Domain umschreiben?
Gruß
jobo
Hallo,
SetEnvIf Host "umbau.example.com" do_auth=1
Order Allow,Deny
Allow from all
Deny from env=do_auth
Satisfy Any
scheint zu funzen. Zusammen mit
AuthType Basic
AuthName "My Protected Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
Passwortabfrage kommt nur, wenn die Subdomain umbau.example.com abgefragt wird.
Gruß
jobo
Hi!
SetEnvIf Host "umbau.example.com" do_auth=1
Deny from env=do_auth
Was es nicht alles gibt - ENV-auswertende Allow/Deny ...
Lo!
Hi!
Kann ich da eine Bedingung einbauen? Nur wenn die Subdomain alt.example.com aufgerufen wird, bitte den Passwortschutz aktivieren? Sonst einfach nach der neuen Domain umschreiben?
Ich glaube nicht, dass das geht, wenn du nicht mit <Files> oder <FilesMatch> oder dem Platzieren der .htaccess ausreichend selektieren kannst. Bedingte Ausführung gibt es nur in den <>-Containern, und da finde ich keinen geeigneten. Außerdem machst du einen Redirect. Das heißt, dass der umgeschriebene Request ein völlig neuer ist. Selbst wenn es ein <IfEnv> gäbe, nützte dir das im Zusammenhang mit dem E-Flag von RewriteRule nichts, denn: neuer Request => neue Umgebung => alte ENVs fort.
Als Alternative sehe ich da nur, den bisherigen Stand in ein anderes Verzeichnis zu kopieren, und dieses zu schützen.
Lo!