bleicher: mod_rewrite

Grüße,
sicher wurde es shcon 1000 mal gefragt, ich habe aber anscheinend nach falschen begriffen gesucht.

ich wollte mich mit mod_rewrite vertraut machen und damit angefangen ein redirect zu basteln.

gewünscht - adresse der form
example.com/dings/
und
example.com/dings/bums

an index.php?variable1=
bzw index.php?variable1=&variable2

zu liefern.

versucht habe ich

RewriteRule ^/(*)/(*)$ index.php?variable1=$1&variable2=$2

habe ich ein grundlegendes problem außer dass ich kein regular expression hinbekomme >_<?

MFG
bleicher

--
__________________________-
Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
http://www.sexgott-or-not.com/?test=428054
  1. habe ich ein grundlegendes problem außer dass ich kein regular expression hinbekomme >_<?

    Wenn du wissen willst, wie Perl reguläre Ausdrücke funktionieren, dann schaust du in der Dokumentation nach.
    http://de.selfhtml.org/perl/sprache/regexpr.htm

    mfg Beat

    --
    Woran ich arbeite:
    X-Torah
       <°)))o><                      ><o(((°>o
  2. echo $begrüßung;

    gewünscht - adresse der form
    example.com/dings/
    und
    example.com/dings/bums

    an index.php?variable1=
    bzw index.php?variable1=&variable2
    zu liefern.

    versucht habe ich
    RewriteRule ^/(*)/(*)$ index.php?variable1=$1&variable2=$2

    Der * ist ein Wiederholoperator. Was möchtest du denn wiederholt haben? Vielleicht ein beliebiges Zeichen? Dafür steht ein Punkt.

    habe ich ein grundlegendes problem außer dass ich kein regular expression hinbekomme >_<?

    Außerdem wirst du eine Endlosschleife bekommen, wenn du nicht real existierende Dateien und Verzeichnisse von einer Umschreiberei ausschließt (z.B. die index.php). Ich hab die Syntax nicht im Kopf. Such mal nach RewriteCond und -d und -f.

    Allerdings nehme ich immer eine andere Vorgehensweise: Statt index.php mit gefakten Parametern aufzurufen, lass ich letztere mit dem QSA-Flag wie sie sind, schreibe einfach nur auf index.php um (untr Beachtung der RewriteConds) und werte im Script REQUEST_URI aus, um daraus dings und bums zu extrahieren. Das ist zwar insgesamt aufwendiger aber kommt sich nicht mit anderen Querystring-Werten in die Quere.

    echo "$verabschiedung $name";

    1. Grüße,

      RewriteCond -d

      liefert leider Error 500

      RewriteRule ^/(.*)\b$ index.php?mod=$1

      schießt mir 404 dazu.
      sollte es nicht den strin der nach dem letzten slash vorkommt liefern?

      MFG
      bleicher

      --
      __________________________-
      Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
      http://www.sexgott-or-not.com/?test=428054
      1. Grüße,
        ich kam etwas verspätet drauf, preg_replace zum crashtest zu nutzen^^

        das ist was ich schaffte -

        RewriteRule /http(.*)/(.*)\b/ index.php?var=$2

        lifert tatsächlich als string aus http://example.com/dings index.php?var=dings

        nur schießt es mir 44 - weil es wohl /dings als zugriff auf unterverzeichniss auswertet. ich muss es wohl auf den oberverzeichniss umleiten, kapiere aber nciht was ich dafür einsetzen soll.

        oh je...

        MFG
        bleicher

        --
        __________________________-
        Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
        http://www.sexgott-or-not.com/?test=428054
        1. echo $begrüßung;

          ich kam etwas verspätet drauf, preg_replace zum crashtest zu nutzen^^
          das ist was ich schaffte -
          RewriteRule /http(.*)/(.*)\b/ index.php?var=$2
          lifert tatsächlich als string aus http://example.com/dings index.php?var=dings

          Ja, aber das ist nicht das, was RewriteRule auswertet, wie du im Handbuch nachlesen könntest. Der Teil zwischen Portnummer bzw. Hostnamen und Querystring ist es. Das kannst du auch sehen, wenn du dir in PHPs $_SERVER-Array den Wert REQUEST_URI anschaust, und dir einen eventuell vorhandenen Querystring wegdenkst.

          Von http://example.com/dings?bums bekommst du also den Teil /dings auf den du dann matchen musst.

          nur schießt es mir 44 - weil es wohl /dings als zugriff auf unterverzeichniss auswertet.

          Nein, der Vergleich hat einfach nur keine Übereinstimmung ergeben. (Wenn man ein RewriteLog hat, kann man sich ansehen, ob die eigene Vermutung zutrifft.)

          echo "$verabschiedung $name";

          1. Grüße,

            Von http://example.com/dings?bums bekommst du also den Teil /dings auf den du dann matchen musst.

            ^(.*)$ index.php?var=$1

            tut es ,)

            aber ist es überhaupt möglich mehrere variablen auf dem weg zu übergeben?

            ich müsste wohl am / splitten.

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

            tut es wiederum nicht. zudem - wie würde dann die optionale übergabe der 2 variabeln aussehn? index.php?var=$1&var2=$2 würde glaube ich so nicht gehen?

            MFG
            bleicher

            --
            __________________________-
            Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
            http://www.sexgott-or-not.com/?test=428054
      2. echo $begrüßung;

        RewriteCond -d
        liefert leider Error 500

        Ich sagte ja auch, dass du danach suchen sollst. Das waren nur Stichwörter für deine Recherche. Auch eine Handbuchlektüre zu RewriteCond hätte dir zeigen können, dass die Syntax eine andere ist, RewriteCond mindestens zwei Parameter haben möchte.

        RewriteRule ^/(.*)\b$ index.php?mod=$1
        schießt mir 404 dazu.
        sollte es nicht den strin der nach dem letzten slash vorkommt liefern?

        Was liefert es stattdessen? Das RewriteLog zu befragen, so du Administrator bist und eins konfigurieren kannst, wäre hilfreich. Aber nehmen wir mal dein Muster auseinander

        ^ Am Anfang
        / soll ein / stehen
        (.*) beliebig viele Zeichen folgen, die außerdem eine Ergebnisgruppe bilden sollen
        \b eine Wortgrenze soll nun kommen
        $ und danach das Ende.

        Ich bin mir nicht ganz sicher, aber das Ende dürfte auch eine Wortgrenze darstellen und wenn danach noch das Ende noch kommen soll, so ist das bereits durch das \b konsumiert worden. Oder anders formuliert, du hast das Ende, davor aber keine Wortgrenze sondern einen Buchstaben. Man korrigiere mich bitte wenn notwendig.

        Wie auch immer, der Grund für den 404er ist, dass dein Suchmuster nicht zutrifft und einen Durchläufer ergibt. Es wird keine Deatei gefunden und deswegen ge404t.

        echo "$verabschiedung $name";