peter_lustig: mod_rewrite Negierte Ordner Weiterleitung

Hallo,

ich versuche seit Tagen folgenden Fall zu lösen:

www.domain.de/seite/seite2/... es können beliebig viele Ordner folgen.

Nun wird ein Verzeichniss hinzugefügt:

www.domain.de/verzeichniss/seite/seite2/

mod_rewrite soll folgendes übernehmen:

Wenn "verzeichniss" nicht in der URL nach "www.domain.de" kommt, füge "verzeichniss" nach der URL "www.domain.de" hinzu. Sämtliche Aufrufe nach "verzeichniss" sollen mit übergeben werden.

Also aus www.domain.de/seite/seite2/... soll mit mod_rewrite dann www.domain.de/verzeichniss/seite/seite2/... werden.

Folgendes funktoniert nicht:

RewriteCond %{REQUEST_URI} !^/verzeichniss/(.*)$
RewriteRule ^(.*)$ /verzeichniss/$1

Oder

RedirectMatch (?!(verzeichniss))/(.*) verzeichniss/$1

Wahrscheinlich sind bei Ansätze komplett falsch :)

Falls jemand eine Idee hat wäre ich sehr dankbar!

Grüße und vielen Dank

  1. hi,

    Ich hatte mal:

    RewriteRule  !^quellen index_rewrite.php

    irgendwann bentutzt. Das ging, alle Urls die _nicht_ mit "quellen" begannen, wurden rewritten. quellen/test.css zB. nicht.

    http://forum.de.selfhtml.org/archiv/2008/6/t172446/#m1130461

    Bei Dir steht ja viel mehr ...

    mfg

    tami

    1. Danke!

      Mit deinem Befehl werden alle URLs auf das eine Verzeichniss umgeleitet, aber die folgenden Aufrufe leider nicht.

      Auch eine Erweiterung um RewriteRule !^(verzeichniss)/(.*) verzeichniss/$1 funktionieren leider nicht.

      Mal den Link durchwühlen, Negierung scheint ja so gar nicht tirivial zu sein.

      Grüße

      1. hi,

        also ich verstehe Deine Anmerkung nicht. Damals war das bei mir so, dass alle Anfragen, die _nicht_ "quellen/..." enthielten auf index.php umgeleitet wurden. du willst, dass alle Anfragen, die nicht verzeichniss enthalten, weitergeleitet werden (m.e. wird verzeichnis übrigens mit einem s geschrieben). Das müsste also passen.

        mfg

        tami

        1. Hi,

          es soll nicht statisch auf eine Datei oder Ordner weitergeleitet werden. Es soll im prinzip der komplette Pfad um "verzeichnis" erweitert werden.

          Aus www.domain.de/seite1/seite2/seite3/ sollte -> www.domain.de/verzeichis/seite1/seite2/seite3/ werden.

          Dein Befehel macht aus www.domain.de/seite1/seite2/seite3/ -> www.domain.de/verzeichnis/

          Grüße

          1. hi,

            Hi,

            es soll nicht statisch auf eine Datei oder Ordner weitergeleitet werden. Es soll im prinzip der komplette Pfad um "verzeichnis" erweitert werden.

            Aus www.domain.de/seite1/seite2/seite3/ sollte -> www.domain.de/verzeichis/seite1/seite2/seite3/ werden.

            Dein Befehel macht aus www.domain.de/seite1/seite2/seite3/ -> www.domain.de/verzeichnis/

            ja, aber den rest kannst du doch mit (.*) "einfangen" und mit $1 oder wie das geht hinten wieder anhängen ...;

            philosophie der kleinen schritte:

            1. überhaupt erstmal alle anfragen, die man will "erwischen"
            2. wenn man 1. hat, schauen, wie die weiterleitung dann korrekt geht ...;

            mfg

            tami

            1. Hi,

              das hatte ich, wie oben beschrieben, bereits probiert ... auch mit diversen Varianten von Klammern usw.

              Leider keinen Erfolg.

              Grüße

  2. Tach!

    Also aus www.domain.de/seite/seite2/... soll mit mod_rewrite dann www.domain.de/verzeichniss/seite/seite2/... werden.

    Bitte keine (potentiell) real existierenden Adressen verwenden. Es gibt extra Beispiel-Domains, die nicht mit ersteren kollidieren.

    Folgendes funktoniert nicht:

    RewriteCond %{REQUEST_URI} !^/verzeichniss/(.*)$
    RewriteRule ^(.*)$ /verzeichniss/$1

    Beim Recherhieren fand ich: http://stackoverflow.com/questions/1747951/using-mod-rewrite-to-add-a-directory

    RedirectMatch (?!(verzeichniss))/(.*) verzeichniss/$1

    Das ist eine negative Look-Ahead-Assertion. Die schaut nicht, was links steht, sondern nach rechts. Du wolltest eine negative Look-Behind-Assertion, die mit (?<! beginnt. (Damit gab es bei meinen Versuchen jedoch eine Endlosschleife, die ich mir nicht erklären konnte und auch nicht wegbekam.)

    dedlfix.

    1. hi,

      http://stackoverflow.com/questions/6105015/mod-rewrite-400-bad-request-problem

      demnach

      RewriteRule (?!^test?$)(.*) test/index.php?u=%{REQUEST_URI}&dollar1=$1 [L,QSA,NC,NE]

      bringt mit

      http://example.com/tes/aaa

      und einem var_dump($_GET) in der test/index.php:

      array(2) { ["u"]=> string(8) "/tes/aaa" ["dollar1"]=> string(7) "tes/aaa" }

      hingegen

      RewriteRule (?!^test?$)(.*) test/$1 [L,QSA,NC,NE]

      bringt einen internal server error ...

      mfg

      tami

      1. hi,

        RewriteRule !^test(.*) /test%{REQUEST_URI} [L,QSA,NC,NE]

        Der Trainling-Slash ...;

        mfg

        tami

        1. hi,

          hi,

          RewriteRule !^test(.*) /test%{REQUEST_URI} [L,QSA,NC,NE]

          Der Trainling-Slash ...;

          Die Klammer brauchts ja nicht:

          RewriteRule !^test /test%{REQUEST_URI} [L,QSA,NC,NE]

          mfg

          tami