Hilfe bei RewriteRule

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Hilfe bei RewriteRule

    Hallo Forum,

    ich habe folgende RewriteRule definiert im Verzeichnis '/_newsletter/' definiert, die soweit funktioniert:

    RewriteRule ^([^index.php].*)$ /_newsletter/index.php?content=$1&%{QUERY_STRING}

    Das sorgt dafür, dass alle Anfragen unterhalb dieses Verzeichnisses nach /_newsletter/index.php
    umgeleitet werden, wo ich den Querystring in der Variable $_GET['content'] verarbeiten kann.

    Beispiel:
    ---------
    Ich fordere im Browser http://test.leo.dev/_newsletter/Stuttgard_2/ an und Anfrage
    wird von /_newsletter/index.php verarbeitet.

    Die in der RewriteRule defnierte Ausnahme, alle Anfragen nach index.php nicht umzuleiten
    wird benötigt, um die Endlosschleife zu verhindern. Was ich nun möchte ist dass die Anfrage
    nach:

    http://test.leo.dev/_newsletter/Stuttgard_2/test.php

    ... nicht umgeletet wird, kriegs aber nicht hin, weil ich nicht wirklich verstehe, was genau

    ^([^index.php].*)$

    ... macht. Das erste ^ verstehe ich als 'am Anfang stehed', das runde Klammerpaar ist
    der Inhalt der Variable $1, das ^ innerhalb der eckigen Klammern steht m.E. für 'nicht',
    die eckigen Klammern machen das 'nicht'index.php zu einer Zeichenklasse, was aber sollen
    .* am Ende. Wenn ich das weg lasse, funktioniert die Umleitung nicht mehr.

    Wie setze schliesse ich die Umleitung für Anfagen von static.html in einem Unterverzeichnis
    aus ?

    kann mir das jemand verraten ?

    tausen dank und

    beste gruesse,
    heinetz

  • #2
    Ups, schon verschoben.

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Zitat von heinetz Beitrag anzeigen
      weil ich nicht wirklich verstehe, was genau

      ^([^index.php].*)$

      ... macht.
      Nichts sinnvolles ...

      Das erste ^ verstehe ich als 'am Anfang stehed', das runde Klammerpaar ist der Inhalt der Variable $1, das ^ innerhalb der eckigen Klammern steht m.E. für 'nicht', die eckigen Klammern machen das 'nicht'index.php zu einer Zeichenklasse,
      Genau - sie sorgen dafür, dass keines (wegen ^) der Zeichen aus der Klasse der Zeichen i, n, d, e, x, Punkt, p, h und noch mal p an dieser Stelle als Match angesehen wird.

      Das beabsichtigte, nämlich auf genau die Zeichenkette index.php zu testen, macht dieser Ausdruch ganz und gar nicht.

      Für das gewünschte komplett sinnfrei.
      was aber sollen .* am Ende.
      Die sorgen dafür, dass ein beliebiges Zeichen (.) beliebig oft (*) vorkommen darf.

      Wie setze schliesse ich die Umleitung für Anfagen von static.html in einem Unterverzeichnis aus ?
      Am besten per RewriteCond, die den REQUEST_URI o.ä. explizit darauf testet.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        ok, wenn das komplett sinnfrei ist ...
        (obwohl es grundsetzlich das macht, was es soll)
        ... will ich versuchen das ganze sinnvoll zu gestalten:

        meine Verzeichnisstruktur:

        /_newletter/
        /_newletter/index.php
        /_newsletter/irgendein_unter_verzeichnis/
        /_newsletter/irgendein_unter_verzeichnis/index.php
        /_newsletter/irgendein_unter_verzeichnis/static.html
        /_newsletter/irgendein_unter_verzeichnis/images/
        /_newsletter/irgendein_unter_verzeichnis/images/image.jpg

        Ich möchte, dass der Aufruf von:

        /_newsletter/irgendein_unter_verzeichnis/index.php bzw.
        /_newsletter/irgendein_unter_verzeichnis/

        nach:

        /_newletter/index.php?content=irgendein_unterverzeichnis/index.php

        ... umgeleitet wird.

        RewriteRule ^(/_newsletter/.*/index.php)$ /_newsletter/index.php?content=$1

        Die dem ursprünglichen Aufruf anhängenden Variablen sollen
        in dem ausgeführten Script erhalten bleiben. Ich versuche
        mich mal ...

        beste gruesse,
        heinetz

        edit_1:

        das hier schient sofort zu funktionieren:

        RewriteRule ^(.*/index.php)$ /_newsletter/index.php?content=$1&%{QUERY_STRING}

        "Leite alle Anfragen nach irgendeine_zeichenfolge gefolgt von "/index.php" nach
        /_newsletter/index.php um."

        Trotzdem ist mir nicht ganz klar warum:

        1. Wird der Ausdruck '.*/index.php' nun auf die Request_uri (z.B. '/_newsletter/unterverzeichnis/')
        oder nur auf '/unterverzeichnis/' angewandt, weil die Regel in einer .htaccess definiert wird, die
        sich im Verzeichnis /_newsletter/ befindet. Also quasi relativ.

        2. Unabhängig davon würde ich denken, dass ich eine Endlosschleife produziert habe, weil
        der Ausdruck .*/index.php genauso auf das Umleitungsziel passt, wenn .* für ein beliegiges
        Zeichen egal wie oft (also auch kein mal) steht.


        beste gruesse,
        heinetz
        Zuletzt geändert von heinetz; 04.02.2010, 16:11.

        Kommentar

        Lädt...
        X