Martin Hein: mo_rewrite

Hallo Forum,

ich habe zum ersten Mal mit mod_rewrite rumprobiert und bin sogar
zu einem Ergebnis gekommen. Meine .htacccess liegt direkt im
DocumentRoot und sieht (auf eine Rule gekürzt) folgendermassen
aus:

.htaccess
---------------------------------------------------------------------
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteRule ^$ /_content/?site_id=1&%{QUERY_STRING}
RewriteRule ^Unsere_Leistungen/$ /_content/?site_id=3&%{QUERY_STRING}
---------------------------------------------------------------------

Damit funktioniert:

1.
Die Eingabe von: "http://sub.domain.net/"
führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=1"

2.
Die Eingabe von: "http://sub.domain.net/Unsere_Leistungen/"
führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=3"

alles wie gewünscht. Jetzt hab ich mal ganz naiv versucht, die
.htaccess nach "/_content/.htaccess" zu verschieben. Das hat
erwartungsgemäss nicht funktioniert.

Dennoch komme ich nicht dahiner, warum nicht.

Kann mir jemand einen Tipp geben ?

danke und

beste gruesse,
martin
funktionert

  1. Hallo Martin,
    Ich bin ehrlich gesagt ein wenig verwirrt und vor allem neugierig.

    http://sub.domain.net/_content/?site_id=1

    Was genau wird denn bei einem solchen Seitenaufruf angezeigt?

    Und das das Verschieben der htacess in den Zielordner nicht funktioniert...spontan würde ich sagen...wenn das Ziel aufgerufen wird kommt die htacess ja wieder zum Einsatz! Allerdings wird die auch nur zum Einsatz kommen wenn Du aufrufst http://sub.domain.net/_content/xyz...

    Ein Aufruf von http://sub.domain.net/ wird die htacess nicht merken wenn sie denn nicht im Root liegt.

    Gruß
    Stephan

    Hallo Forum,

    ich habe zum ersten Mal mit mod_rewrite rumprobiert und bin sogar
    zu einem Ergebnis gekommen. Meine .htacccess liegt direkt im
    DocumentRoot und sieht (auf eine Rule gekürzt) folgendermassen
    aus:

    .htaccess

    Options +FollowSymLinks
    RewriteEngine On
    RewriteBase /
    RewriteRule ^$ /_content/?site_id=1&%{QUERY_STRING}
    RewriteRule ^Unsere_Leistungen/$ /_content/?site_id=3&%{QUERY_STRING}

    Damit funktioniert:

    Die Eingabe von: "http://sub.domain.net/"
    führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=1"

    Die Eingabe von: "http://sub.domain.net/Unsere_Leistungen/"
    führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=3"

    alles wie gewünscht. Jetzt hab ich mal ganz naiv versucht, die
    .htaccess nach "/_content/.htaccess" zu verschieben. Das hat
    erwartungsgemäss nicht funktioniert.

    Dennoch komme ich nicht dahiner, warum nicht.

    Kann mir jemand einen Tipp geben ?

    danke und

    beste gruesse,
    martin
    funktionert

    1. Hallo Stephan,

      Ich versuche mal mein Anliegen zu beschreiben:

      Ausgangslage:
      -------------
      Ich habe, wie gesagt im DocumentRoot eine .htaccess mit ewig
      vielen RewriteRules. Die sind so aufgebaut, dass immer die
      "index.php" mit einem Paramter im Unterverzeichns "/_content"
      angezeigt wird. Diese ".htaccess" wird über ein selbstgestricktes
      CMS erneuert, sobald neue Seiten angelegt und veröffentlicht
      werden.

      Mein Anliegen:
      --------------
      Ich möchte eine weitere ".htaccess" mit z.B. Zugriffsrechten im
      DocumentRoot anlegen, statt diese Zugriffsrechte in die gleiche
      Satei zu schreiben. Deshalb hätte ich gerne, die ".htaccess" mit
      den RewriteRules in das Verzeichns "/content" verschoben und
      frage mich, ob ich durch ändern der RewriteBase und der -Rules
      dieselbe Ausgabe erzeugen kann.

      vielleicht mache ich einen grundsätzlichen Denkfehler. Da
      bin ich mir eben nicht sicher ;) ich könnte mir auch
      vorstellen, dass man die RewriteRules auf zwei .htaccess
      verteilen kann.

      danke für's Nachdenken und

      beste gruesse,
      martin

      1. Hallo Martin,
        Rewrite Rules in den root und Zugriffsrechte in den _content Ordner?!
        Das Problem ist das die htacess ansonsten nicht gefunden wird....es sei denn es gibt das Einstellungen die man evtl. am Apache(IIS, whatever..) machen könnte...da bin ich aber grade überfragt!

        Viele Grüße

        Stephan

        1. Hallo Stephan,

          ja, das war mir eben auch als letzte Möglichkeit eingefallen.
          Die Einschränkung besteht allerdings darin, dass die
          Zuriffsrechte dann auch wieder nur für das Verzeichnis gelten.

          Damit könnte man noch leben aber interssant wird es hier:

          Die .htaccess wird, wie beschrieben durch ein CMS ständig neu geschrieben. Dabei ist es in der Vergangenheit zu Fehlern,
          genau genommen zu einer fehlerhaften .htaccess und damit zum
          Error 500 gekommen. Mein Plan war, ein Error Document für 500
          zu definieren, dass dann die htaccess löscht. Und da beisst
          sich die Katze in den Schwanz ;)

          beste gruesse,
          martin

          1. Wie wäre es denn die Nutzerrechte erst gar nicht mit htacess zu machen? Scheint mri genrell eh nicht so die feinste Methode zu sein....es gibt da ein feines Opensource Teil....relativ einfach einzusetzen. Es wird vor dem öffnen einer php eine andere php geladen die die Nutzungsrechte abkaspert. So hättest lediglich die Seiteumleitungsrules in der htacess und die Zugriffsmethodik komplett anders gelöst.

            Gruß
            Stephan

            1. Das mit den Nutzungsrechten war auch eher ein Beispiel. Ich
              schrieb ja schon, dass die .htaccess vor allem aus RewriteRules
              besteht, die per Script geschrieben werden. Ausser diesen RewriteRules sollen andere Angaben in der .htaccess stehen
              und deshalb hatte ich vor, mit zwei verschedenen .htaccess
              zu arbeiten und in /_content/.htaccess die rules für / zu
              defineren. das scheint aber en grundsätzlcher denkfehler
              meinerseits zu sen und ich muss das anders lösen. das ist auch
              möglich, es ging mir mehr darum, herauszufinden, ob ich diesen
              denkfehler mache. und so scheint es zu sein.

              beste gruesse,
              martin

  2. Anders gefragt:

    ich habe meine .htaccess nun in das Unterverzechnis Content
    verschoben und etwas angepasst, bis ich sie zum Laufen bekommen
    habe.

    .htaccess
    ---------------------------------------------------------------------
    Options +FollowSymLinks

    RewriteEngine On
    RewriteBase /_content/
    RewriteRule ^$ ?site_id=1&%{QUERY_STRING}
    RewriteRule ^Unsere_Leistungen/$ ?site_id=3&%{QUERY_STRING}
    ---------------------------------------------------------------------

    Damt funktioniert nun folgendes erwartungsgemäss:

    1.
    Die Eingabe von: "http://sub.domain.net/_content/"
    führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=1"

    2.
    Die Eingabe von: "http://sub.domain.net/_content/Unsere_Leistungen/"
    führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=3"

    ... das ist eigentlich nicht das was ich will. Ist es überhaupt möglich, die RewriteRule so zu gestalten, dass die urspünglichen
    Eingaben funktionieren ?

    beste gruesse,
    martin

    1. Nein. Denn bei der ursprünglichen Eingabe wird nur im root nach der .htaccess gesucht. Was aber spricht dagegen die -htacess auch genau dort zu platzieren?

      Gruß
      Stephan

      Anders gefragt:

      ich habe meine .htaccess nun in das Unterverzechnis Content
      verschoben und etwas angepasst, bis ich sie zum Laufen bekommen
      habe.

      .htaccess

      Options +FollowSymLinks

      RewriteEngine On
      RewriteBase /_content/
      RewriteRule ^$ ?site_id=1&%{QUERY_STRING}
      RewriteRule ^Unsere_Leistungen/$ ?site_id=3&%{QUERY_STRING}

      Damt funktioniert nun folgendes erwartungsgemäss:

      Die Eingabe von: "http://sub.domain.net/_content/"
      führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=1"

      Die Eingabe von: "http://sub.domain.net/_content/Unsere_Leistungen/"
      führt zur Ausgabe von "http://sub.domain.net/_content/?site_id=3"

      ... das ist eigentlich nicht das was ich will. Ist es überhaupt möglich, die RewriteRule so zu gestalten, dass die urspünglichen
      Eingaben funktionieren ?

      beste gruesse,
      martin

      1. Hallo Stephan!

        Erstmal Danke für Deine Antworten an Martin!

        Bitte vermeide dabei TOFU und zitiere vom Vorposter nur die Textpassagen, auf welchen Du Dich beziehst!

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --

        _ - jenseits vom delirium - _
        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        Nichts ist unmöglich? Doch!
        Heute schon gegökt?
        1. Hallo Stephan!

          Hallo Patrick!

          Erstmal Danke für Deine Antworten an Martin!

          Gern geschehen.

          Bitte vermeide dabei TOFU und zitiere vom Vorposter nur die Textpassagen, auf welchen Du Dich beziehst!

          Ok...wird gemacht!

          Viele Grüße aus Frankfurt/Main,

          Viele Grüße aus Langenfeld!

          Stephan ;-)