Berthold: RewriteRule/reg. Expression

Hallo,
wie offensichtlich viele Mitleidende habe ich Probleme mit redirect und regul.
Ausdrücken.
Ich möchte folgendes erreichen.

Die Seite www.foo.com und die Seite foo.com sollen umgeleitet werden auf www.bar.com/foo
Die Seite www.foo.com/xyz und die Seite foo.com/xyz sollen umgeleitet werden auf www.bar.com/foo/xyz

Mein letzter Versuch nach vielen anderen war der folgende:

RewriteEngine on
 RewriteCond %{HTTP_HOST}    ^(www)?.(.*).de    [NC]
 RewriteRule ^$              http://www.bar.com/%2   [L]
 RewriteRule ^(.*)$          http://www.bar.com/%2/$1   [L]

www.foo.com und foo.com werden richtig umgeleitet,
www.foo.com/xyz und foo.com/xyz führen aber zu www.foo.com//xyz,
d.h. es wird foo nicht durch bar ersetzt und der Wert %2 ist leer.
Ich bitte um Tipps.

  1. Hellihello

    RewriteEngine on
    RewriteCond %{HTTP_HOST}    ^(www)?.(.*).de    [NC]

    Muss das sein?

    RewriteRule ^$              http://www.bar.com/%2   [L]

    Anfang, Ende alls nach bar.com

    RewriteRule ^(.*)$          http://www.bar.com/%2/$1   [L]

    Zwischen Anfang und Ende darf alles stehen, %2 ist nicht definiert, $1 ist das, was zwischen Anfang und Ende steht.

    Wird das durch die RewriteConde beeinflusst?

    www.foo.com und foo.com werden richtig umgeleitet,
    www.foo.com/xyz und foo.com/xyz führen aber zu www.foo.com//xyz,
    d.h. es wird foo nicht durch bar ersetzt und der Wert %2 ist leer.

    RewriteRule .*foo.com/xyz$          http://www.bar.com/foo/xyz   [L]

    Was Du an vars erhältst, sind die eingeklammerten Teile. Die erst $1, die zweite $2?

    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. Hallo,

      RewriteEngine on
      RewriteCond %{HTTP_HOST}    ^(www)?.(.*).de    [NC]

      Muss das sein?

      foo war in Beispiel, es soll genau so funktionieren für andere Domainnamen.
      Deshalb habe ich diesen Teil (foo) der aufgerufenen Domain aus dem obigen 2. Klammerausdruck und dies erreiche ich doch mit %2 - oder nicht?
      In jedem Falle funktioniert das ja auch im Falls von www.foo.com, warum ist %2 dann im zweiten Falle nicht besetzt?

      1. Hellihello

        foo war in Beispiel, es soll genau so funktionieren für andere Domainnamen.
        Deshalb habe ich diesen Teil (foo) der aufgerufenen Domain aus dem obigen 2. Klammerausdruck und dies erreiche ich doch mit %2 - oder nicht?

        Keine Ahnung. Wieso machst Du es nicht unten im RewriteRule in einer Zeile?

        RewriteRule ^$              http://www.bar.com/%2   [L]

        Was soll diese Rule bringen? Wenn das greift, wird alles weitere abgebrochen. Aber zwischen dem Anfang ^ und dem Ende $ steht ja garnichts.

        Wollte ich www.foo.com nach bar.com/foo haben, wäre doch

        RewriteRule [www.]*([a-z]*).com(.*) $     http://www.$1.com$2   [L]

        vielleicht eher der Ansatz? Eine statt zwei Zeilen.

        Dank und Gruß,

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
        1. Hallo,

          RewriteRule [www.]*([a-z]*).com(.*) $     http://www.$1.com$2   [L]

          funktioniert nicht, und so weit ich weiß, kann der Domainname nicht aus der RewriteRule ermittelt werden ($1 ist leer!).

          Nochmal:
          www.irgend-was.com und irgend-was.com soll nach www.bar.com/irgend-was
          und
          www.irgend-was.com/xyz und irgend-was.com/xyz soll nach www.bar.com/irgend-was/xyz
          umgeleitet werden.
          Dabei ist irgend-was die aufgerufene Domain, www.bar.com ... feste Zieldomain.

          Gruß
          Berthold

          1. Hellihello

            Hallo,

            RewriteRule [www.]*([a-z]*).com(.*) $     http://www.$1.com$2   [L]

            funktioniert nicht, und so weit ich weiß, kann der Domainname nicht aus der RewriteRule ermittelt werden ($1 ist leer!).

            Wieso das nicht?

            Nochmal:
            www.irgend-was.com und irgend-was.com soll nach www.bar.com/irgend-was
            und
            www.irgend-was.com/xyz und irgend-was.com/xyz soll nach www.bar.com/irgend-was/xyz
            umgeleitet werden.
            Dabei ist irgend-was die aufgerufene Domain, www.bar.com ... feste Zieldomain.

            RewriteEngine on

            RewriteRule html-ag.(wvs-berlin).de(.*) http://google.de?q=$1&q1=$2

            http://html-ag.wvs-berlin.de/rewrite

            Dank und Gruß,

            frankx

            --
            tryin to multitain  - Globus = Planet != Welt
            1. Hi,
              ich kann nur feststellen, dass es so nicht funktionierte.

              Ich schaffe immer nur die eine oder die andere Variante.
              Jetzt habe ich es so versucht:

              RewriteEngine on
               RewriteCond %{HTTP_HOST}    ^(www)?.(.*).de    [NC]
               RewriteRule ^(.*)$          http://www.bar.com/%2/$1   [L]

              Damit funktioniert die Umleitung von
                www.foo.com/xyz und foo.com/xyz
              und fast auch
                www.foo.com und foo.com
              nur dass hier das Ziel www.bar.com/foo/ mit dem / endet, was nicht sein darf.
              Gruß
              Berthold

  2. gudn tach!

    RewriteCond %{HTTP_HOST}    ^(www)?.(.*).de    [NC]

    ich haette jetzt den ersten punkt auch als fakultativ bewertet, also:

    RewriteCond %{HTTP_HOST}    ^(www.)?(.*).de    [NC]

    RewriteRule ^$              http://www.bar.com/%2   [L]
    RewriteRule ^(.*)$          http://www.bar.com/%2/$1   [L]

    www.foo.com und foo.com werden richtig umgeleitet,
    www.foo.com/xyz und foo.com/xyz führen aber zu www.foo.com//xyz,
    d.h. es wird foo nicht durch bar ersetzt und der Wert %2 ist leer.

    hmm, was sagt denn das log-file? und was passiert, wenn du das pattern explizit mit E=VAR:VAL (z.b. E=footeil:%2) speicherst?

    prost
    seth

    1. Hellihello seth,

      RewriteCond %{HTTP_HOST}    ^(www)?.(.*).de    [NC]

      ich haette jetzt den ersten punkt auch als fakultativ bewertet, also:

      RewriteCond %{HTTP_HOST}    ^(www.)?(.*).de    [NC]

      RewriteRule ^$              http://www.bar.com/%2   [L]
      RewriteRule ^(.*)$          http://www.bar.com/%2/$1   [L]

      Kannst Du mir sagen, warum bei

      RewriteEngine on
       RewriteCond %{HTTP_HOST}    ^(www.)?(.*).de
       RewriteRule (.*)          http://www.example.com?a=%2&b=$1   [L]

      in $1 nur noch der Pfad unterhalb des Pfades auftaucht, in dem die .htaccess liegt?
      http://html-ag.wvs-berlin.de/rewrite/abc/def bringt als $1=abc/def?

      Aber der komplette Dateipfad, wenn ich nur das Verzeichnis aufrufe, in dem die .htaccess liegt?
      http://html-ag.wvs-berlin.de/rewrite bringt $1="/var/www/vhosts/html-ag.wvs-berlin.de/httpdocs/rewrite"

      In beiden Fällen tauchen aber etwaige Querystrings nicht auf.

      Dank und Gruß,

      frankx

      --
      tryin to multitain  - Globus = Planet != Welt
      1. gudn tach!

        Kannst Du mir sagen, warum bei

        RewriteEngine on
        RewriteCond %{HTTP_HOST}    ^(www.)?(.*).de
        RewriteRule (.*)          http://www.example.com?a=%2&b=$1   [L]

        in $1 nur noch der Pfad unterhalb des Pfades auftaucht, in dem die .htaccess liegt?
        http://html-ag.wvs-berlin.de/rewrite/abc/def bringt als $1=abc/def?

        Aber der komplette Dateipfad, wenn ich nur das Verzeichnis aufrufe, in dem die .htaccess liegt?
        http://html-ag.wvs-berlin.de/rewrite bringt $1="/var/www/vhosts/html-ag.wvs-berlin.de/httpdocs/rewrite"

        ich kenn ich mit dem apache-rewrite-kram nicht besonders aus und kenne auch keine gescheite dokumentation dazu. deswegen bin ich hier schon ueberfragt und muss raten: ich vermute, dass es daran liegt, dass RewriteRule standardmaessig auf den "rewritten path" ("neugeschriebener pfad" trifft's irgendwie nicht) des bisher letzten matchenden aufrufs von RewriteRule zugreift.

        In beiden Fällen tauchen aber etwaige Querystrings nicht auf.

        das gehoert so, siehe manual.

        prost
        seth

        1. Hellihello

          RewriteEngine on
          RewriteCond %{HTTP_HOST}    ^(www.)?(.*).de
          RewriteRule (.*)          http://www.example.com?a=%2&b=$1   [L]

          in $1 nur noch der Pfad unterhalb des Pfades auftaucht, in dem die .htaccess liegt?
          http://html-ag.wvs-berlin.de/rewrite/abc/def bringt als $1=abc/def?

          Aber der komplette Dateipfad, wenn ich nur das Verzeichnis aufrufe, in dem die .htaccess liegt?
          http://html-ag.wvs-berlin.de/rewrite bringt $1="/var/www/vhosts/html-ag.wvs-berlin.de/httpdocs/rewrite"

          ich kenn ich mit dem apache-rewrite-kram nicht besonders aus und kenne auch keine gescheite dokumentation dazu. deswegen bin ich hier schon ueberfragt und muss raten: ich vermute, dass es daran liegt, dass RewriteRule standardmaessig auf den "rewritten path" ("neugeschriebener pfad" trifft's irgendwie nicht) des bisher letzten matchenden aufrufs von RewriteRule zugreift.

          Ja, "aber" hier wurde ja garnichts rewritten davor. Das RewriteCond sollte doch wohl lediglich sowas wie ein Filter sein. Ich hätte jetzt erwartet, dass (.*) die komplette URL darstellen würde. Schon garnicht aber den Systempfad. Und auch nicht diesen kürzen um den Teil, der zur .htaccess führt.

          In beiden Fällen tauchen aber etwaige Querystrings nicht auf.

          das gehoert so, siehe manual.

          Das las ich auch schon mittlerweile, da gibts sowas wie %{QUERY_STRINTG}

          Dank und Gruß,

          frankx

          --
          tryin to multitain  - Globus = Planet != Welt
          1. Hallo!
            Betrifft Eure Diskussion noch mein Problem?
            Ich habe nämlich den Faden verloren.
            Wenn ich rekapituliere, so gehts doch in meinem Fall nur noch darum ein "/" am Ende der Ziel-URL zu entfernen.
            Ich habe zwar gelesen, wie man einen Schrägstrich hinzufügt, aber ihn wegzubekommen, schaffe ich nicht.
            Gruß
            Berthold

            1. Hellihello

              Wenn ich rekapituliere, so gehts doch in meinem Fall nur noch darum ein "/" am Ende der Ziel-URL zu entfernen.
              Ich habe zwar gelesen, wie man einen Schrägstrich hinzufügt, aber ihn wegzubekommen, schaffe ich nicht.

              Meines erachtens verwendest Du eine RewriteCond wo keine nötig ist. Mach zwei Rules, eins mit "foo", eins ohne. Dann wäre auch der Slash garnicht erst da. Eine Regel für zwei unterschiedliche Outputs scheint nicht günstig zu sein.

              Dank und Gruß,

              frankx

              --
              tryin to multitain  - Globus = Planet != Welt
              1. Hallo,

                Meines erachtens verwendest Du eine RewriteCond wo keine nötig ist. Mach zwei Rules, eins mit "foo", eins ohne. Dann wäre auch der Slash garnicht erst da. Eine Regel für zwei unterschiedliche Outputs scheint nicht günstig zu sein.

                Aus der
                RewriteCond erhalte ich doch erst das "foo", nämlich als Teilstring der gerufenen URL.
                Wie kann ich sonst "foo" erhalten?
                Ich wiederhole, "foo" ist nicht ein feststehender Wert.
                Die Datei .htacess soll identisch sein für mehrere Webseiten, die auf die genannte Art umgeleitet werden sollen.
                Gruß
                Berthold

                1. Hellihello

                  Meines erachtens verwendest Du eine RewriteCond wo keine nötig ist. Mach zwei Rules, eins mit "foo", eins ohne. Dann wäre auch der Slash garnicht erst da. Eine Regel für zwei unterschiedliche Outputs scheint nicht günstig zu sein.
                  Aus der
                  RewriteCond erhalte ich doch erst das "foo", nämlich als Teilstring der gerufenen URL.
                  Wie kann ich sonst "foo" erhalten?
                  Ich wiederhole, "foo" ist nicht ein feststehender Wert.

                  [http://forum.de.selfhtml.org/?t=168072&m=1096468]?

                  Die Datei .htacess soll identisch sein für mehrere Webseiten, die auf die genannte Art umgeleitet werden sollen.

                  Und Server-Zugriff hast Du nicht?

                  Dank und Gruß,

                  frankx

                  --
                  tryin to multitain  - Globus = Planet != Welt
                  1. Hallo,

                    [http://forum.de.selfhtml.org/?t=168072&m=1096468]?

                    nein
                       https://forum.selfhtml.org/?t=168072&m=1096474

                    Und Server-Zugriff hast Du nicht?

                    Worauf im Server?
                    Lokal oder im Internet?

    2. Hallo,

      hmm, was sagt denn das log-file? und was passiert, wenn du das pattern explizit mit E=VAR:VAL (z.b. E=footeil:%2) speicherst?

      Die RewriteLog-Angabe lehnt das System ab (in .htaccess), in der errorlog steht nichts.
      Was meinst Du damit: E=VAR:VAL (z.b. E=footeil:%2)?
      Wo gebe ich das an und was macht dies?
      Gruß
      Berthold

      1. Hallo,
        kennt Ihr eine kurze,übersichtliche Beschreibung über die Thematik,
        insbesondere über die %1, %2, %2, .... und die Reihenfolge der Verarbeitung.
        Ich hatte angenommen,dass jedem geklammerten Ausdruck in den RewriteCond ein derartiger Parameter zugewiesen wird undzwar in der Reihenfolge des Auftretens,
        Jetzt habe ich aber den Eindruck, dass nur die letzte RewriteCond herangezogen wird und daher in dem einen Fall der Wert nicht vorhanden ist!
        Gruß
        Berthold

        1. Hellihello

          kennt Ihr eine kurze,übersichtliche Beschreibung über die Thematik,
          insbesondere über die %1, %2, %2, .... und die Reihenfolge der Verarbeitung.
          Ich hatte angenommen,dass jedem geklammerten Ausdruck in den RewriteCond ein derartiger Parameter zugewiesen wird undzwar in der Reihenfolge des Auftretens,
          Jetzt habe ich aber den Eindruck, dass nur die letzte RewriteCond herangezogen wird und daher in dem einen Fall der Wert nicht vorhanden ist!

          "RewriteCond backreferences: These are backreferences of the form %N (1 <= N <= 9), which provide access to the grouped parts (again, in parentheses) of the pattern, from the last matched RewriteCond in the current set of conditions."

          http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritecond?

          Dank und Gruß,

          frankx

          --
          tryin to multitain  - Globus = Planet != Welt
      2. gudn tach!

        hmm, was sagt denn das log-file? und was passiert, wenn du das pattern explizit mit E=VAR:VAL (z.b. E=footeil:%2) speicherst?

        Die RewriteLog-Angabe lehnt das System ab (in .htaccess), in der errorlog steht nichts.

        du koenntest den kram unter einem lokalen apache von dir ausprobieren und dort RewriteLog setzen.

        Was meinst Du damit: E=VAR:VAL (z.b. E=footeil:%2)?
        Wo gebe ich das an und was macht dies?

        in eckigen klammern, so wie [R], siehe http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritelog.
        viele beispiele dazu sind z.b. auf http://www.webmasterworld.com/apache/3208525.htm.

        aber eigentlich sollte das nicht noetig sein. in %2 muesste afaics schon das richtige stehen.

        prost
        seth