jobo: rewrite rule rewritet unerklärlich - kombination von rewritecond

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

  1. 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!

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

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

    1. 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!

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

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

          1. Hi!

            SetEnvIf Host "umbau.example.com" do_auth=1
            Deny from env=do_auth

            Was es nicht alles gibt - ENV-auswertende Allow/Deny ...

            Lo!

        2. 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!