Leon Weiergans: Apache Rewrite

Hallo Forum,

ich möchte für eine kleine Seite, die dynamisch per PHP erstellt wird mit Apaches mod_rewrite die URL's verständlicher machen. Eigentlich wird immer die gleiche Datei mit 1-2 Parametern aufgerufen (wie index.php?K=x&V=y)

Ich habe jetzt folgende Conditions & Rules erstellt, funktioniert auch:

RewriteEngine On
    RewriteCond %{REQUEST_URI} (^/home/.*$)  [OR]
    RewriteCond %{REQUEST_URI} (^/home.*$)
    RewriteRule ([1].*$)  /index.php?K=1   [QSA,L]

RewriteCond %{REQUEST_URI} (^/archiv/.*$)  [OR]
    RewriteCond %{REQUEST_URI} (^/archiv.*$)
    RewriteRule ([2].*$)  /index.php?K=2   [QSA,L]

usw...

Eine Sache bekomme ich aber nicht hin, und zwar habe ich auch eine Suche eingebaut, die ich so aufrufen kann: index.php?K=4&V=suchwort
oder auch einfach nur index.php?K=4.
Dies möchte ich auch aufrufen können wie /suche/suchwort oder auch /suche/suchwort/ oder nur /suche/

Ich schaffe aber nicht die richtige Rewrite-Rule:
Ich habe es jetzt in zwei Schritte gemacht:

RewriteCond %{REQUEST_URI} (^/suche/+.*$)  [OR]
    RewriteRule ([3].*$)  /index.php?K=4   [QSA,L]

RewriteCond %{REQUEST_URI} (^/suche.*$)  [OR]
    RewriteRule ([4].*$)  /index.php?K=4   [QSA,L]

Im ersten Teil sollen die ANfragen mit Suchwort treffen
und im zweiten die ohne Suchworte. Aber wie bekomme ich das Suchwort
nach V=suchwort?

Danke für Hilfe,
Leon


  1. /home/|/home ↩︎

  2. /archiv/|/archiv ↩︎

  3. /suche/ ↩︎

  4. /suche/|/suche ↩︎

  1. Hi Leon,

    RewriteCond %{REQUEST_URI} (^/home/.*$)  [OR]
        RewriteCond %{REQUEST_URI} (^/home.*$)
        RewriteRule ([1].*$)  /index.php?K=1   [QSA,L]

    Warum so kompliziert? Warum nicht einfach so:

    RewriteRule ^/home.* /index.php?K=1 [QSA,L]

    Je nachdem wo du die RewriteRule notierst müssen soweit ich weiß eventuell noch die führenden Slashs weg...

    RewriteCond %{REQUEST_URI} (^/archiv/.*$)  [OR]
        RewriteCond %{REQUEST_URI} (^/archiv.*$)
        RewriteRule ([2].*$)  /index.php?K=2   [QSA,L]

    Auch hier - wozu die RewriteCond? Da reicht die RewriteRule:

    RewriteRule ^/archiv.* /index.php?K=2

    Eine Sache bekomme ich aber nicht hin, und zwar habe ich auch eine Suche eingebaut, die ich so aufrufen kann: index.php?K=4&V=suchwort
    oder auch einfach nur index.php?K=4.
    Dies möchte ich auch aufrufen können wie /suche/suchwort oder auch /suche/suchwort/ oder nur /suche/

    Probiers mal mit

    RewriteRule ^/suche/([^/]*)/? /index.php?K=4&V=$1

    Allerdings beinhaltet das noch nicht /suche/... aber das sollte auch noch zu schaffen sein.

    MfG, Dennis.


    1. /home/|/home ↩︎

    2. /archiv/|/archiv ↩︎

    1. Hallo,

      Eine Sache bekomme ich aber nicht hin, und zwar habe ich auch eine Suche eingebaut, die ich so aufrufen kann: index.php?K=4&V=suchwort
      oder auch einfach nur index.php?K=4.
      Dies möchte ich auch aufrufen können wie /suche/suchwort oder auch /suche/suchwort/ oder nur /suche/

      Probiers mal mit

      RewriteRule ^/suche/([^/]*)/? /index.php?K=4&V=$1

      Er kann hier versuchen auch mit "RewriteCond %{QUERY_STRING}" und RegExp zu arbeiten.

      Grüße
      Thomas