FrankHartmann: RewriteRule /t/^(.*).jpg$ ../a/index.php?thumb=ja&bild=$1

Hallo,

wie kann ich lediglich den Bildnamen OHNE Verzeichnis t/ an die index.php übergeben lassen?

RewriteRule /t/^(.*).jpg$ ../a/index.php?thumb=ja&bild=$1

Aktuell landet z.B. t/bildname in der Variable "thumb" und muss dort extra erst manuell entfernt werden.

Danke,
Frank

  1. Lieber FrankHartmann,

    /t/^(.*).jpg$

    das Circumflex-Zeichen ("^") bedeutet "hier fängt der zu durchsuchende String an". Bei Dir steht, dass da vor dem Anfang zuerst noch "/t/" stehen soll. Das widerspricht sich.

    Ich würde das so schreiben (am Ende könnte ja noch ein http://de.selfhtml.org/javascript/objekte/location.htm#search@title=Searchstring stehen):
    ^/t/(.*).jpg($|?)

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Hi Felix,

      Ich würde das so schreiben (am Ende könnte ja noch ein http://de.selfhtml.org/javascript/objekte/location.htm#search@title=Searchstring stehen):
      ^/t/(.*).jpg($|?)

      Nein, kann nicht. Die RewriteRule matched nur gegen den Pfad-Teil der angeforderten Adresse:

      The Pattern will initially be matched against the part of the URL after the
        hostname and port, and before the query string. If you wish to match against
        the hostname, port, or query string, use a RewriteCond with the %{HTTP_HOST},
        %{SERVER_PORT}, or %{QUERY_STRING} variables respectively.          (Quelle)

      Abgesehen davon matched der Punkt noch ein beliebiges Zeichen und nicht zwangsläufig einen Punkt.
      Ich würde die RewriteRule so aufbauen:

      RewriteRule ^/t/(.+)\.jpg$ /a/index.php?thumb=ja&bild=$1

      Viele Grüße,
        ~ Dennis.

      1. Ahoi Dennis,

        zwei Fragen:

        warum (.+) und nicht (.*)

        und warum

        ^/t und nicht ^t ? steht zu Beginn immer der Slash?

        Dank und Gruß,

        frankx

        1. Hi frankx,

          warum (.+) und nicht (.*)

          Weil (.*) beliebig viele Zeichen matched, also auch 0 Zeichen und somit auch auf /t/.jpg zutrifft. Das halte ich nicht für sonderlich sinnvoll, da dieses Bild höchstwahrscheinlich nicht existieren wird, also lasse ich solch eine Anfrage lieber direkt vom Apachen mit 404 beantworten, indem ich (.+) verwende. Das matched ein Zeichen oder mehrere, aber es muss mindestens ein Zeichen vorhanden sein.

          Letztendlich wird man natürlich im PHP-Script so oder so den erhaltenen Parameter prüfen müssen, bevor man ihn weiterverarbeitet. Es lassen sich also sowohl für (.*) als auch für (.+) Pro und Contra Argumente finden.

          ^/t und nicht ^t ? steht zu Beginn immer der Slash?

          Das hab ich jetzt einfach nur so von Frank und Felix übernommen. Ob du die Pattern mit führendem Slash notieren musst oder nicht, hängt davon ab, in welchem Kontext du die RewriteRule notierst:

          When using the rewrite engine in .htaccess files the per-directory prefix (which
            always is the same for a specific directory) is automatically removed for the
            pattern matching and automatically added after the substitution has been done.
            This feature is essential for many sorts of rewriting; without this, you would
            always have to match the parent directory, which is not always possible. (Quelle)

          In einem <Directory>-Block oder in einer .htaccess-Datei müsstest du den Slash weglassen und dafür eventuell noch die RewriteBase angeben, in der Server- oder VirtualHost-Konfiguration gehört der Slash da hin.

          Viele Grüße,
            ~ Dennis.