RewriteEngine Frage

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

  • RewriteEngine Frage

    Nach viel googlen ist es mir gelungen aus
    http://website.de/index.php?show=hallo mit hilfen von Rewriteengine
    http://website.de/hallo.html darzustellen.

    PHP-Code:
    RewriteEngine On
     Options 
    +FollowSymlinks
     RewriteBase 
    /
     
    RewriteRule ^(.*)(\.html?)$ index.php?show=$
    Soweit so gut... nun wollte ich das Ganze etwas weiter treiben und auf http://website.de/hallo bzw. http://website.de/hallo/ minimieren, aber hier bin ich gescheitert. Ein einfaches:

    PHP-Code:
    RewriteEngine On
     Options 
    +FollowSymlinks
     RewriteBase 
    /
     
    RewriteRule ^(.*)$ index.php?show=$
    funktioniert leider nicht. Fragen:

    1) Ist der obrigen Syntax so ok, bzw. ist etwas überflüssig
    2) Wie bekomm ich das richtig hin?

    Vielen Danke

  • #2
    Du musst dem Server sagen, dass er nur Verzeichnisse mit den website.de/verzeichnis
    verwendet werden und nicht
    website.de/index.php?show=...
    denn sonst wird er endlos weiter die Rewrite-Rules anwenden und dir nen Fehler ausgeben.

    Dafür gibt es RewriteCond

    Code:
    RewriteEngine On
    RewriteCond %{REQUEST_URI}  !^/index.php
    RewriteRule ^(.*) /index.php?show=$1
    So wird alles, was hinter website.de/ steht als GET-Parameter show übergeben.
    Das Problem, was jetzt auftritt ist natürlich, dass auch Anfragen für Bilder / CSS-Dateien usw. von der index.php abgearbeitet werden müssen. Als Alternative kannst du entweder noch weitere RewriteConds machen, damit Bilder usw. nicht von der RewriteEngine bearbeitet werden, oder du kannst für jedes Pseudo-Verzeichnis eine extra Rewrite-Rule machen.
    hopka.net!

    Kommentar


    • #3
      Das erklärt einiges thx. Noch eine Frage:
      Wenn ich noch neben show=$1 noch einen zweiten Parameter übergeben will, wie stell ich das im RewriteRule ein?

      RewriteRule ^(.*) /index.php?show=$1
      RewriteRule ^(.*)/(.*) /index.php?show=$1&parameter=$2

      ?? Falls dem so ist, warum funktioniert das RewriteCond dann wieder nicht, d.h. die Bilder funktionieren wieder nicht mehr, obwohl Regeln wie
      RewriteCond %{REQUEST_URI} !(.*).gif exisitieren.

      Danke
      Zuletzt geändert von Firefighter; 30.05.2004, 15:42.

      Kommentar


      • #4
        Brauchst du gar nicht.

        Denn bei dem, was ich dir gepostet habe, wird dann einfach in $show ein Wert wie "verzeichnis1/verzeichnis2/verzeichnis3/" drin sein. Das hat den Vorteil, dass du unendlich viele Parameter übergeben kannst. Die komplette Verarbeitung läuft dann über PHP.

        Wenn du das unbedingt mit dem zweiten Parameter von Hand haben willst, dann musst du natürlich die Reihenfolge der RewriteRules umdrehen, denn (.*) trifft auf die gesamte URL zu, wenn du also zwei getrennte Teile haben willst musst du vorher (.*)/(.*) anwenden, denn sobald eine Rule passt wird nicht mehr weiter gesucht.

        Deine RewriteCond muss übrigens so aussehen:
        Code:
        RewriteCond %{REQUEST_URI}  !\.gif$
        denn der . steht für jedes beliebige Zeichen, und muss daher einen \ vorangestellt kriegen, wenn genau der . als Punkt gemeint ist. Mit dem $ am Ende wird festgelegt, dass .gif genau am Ende der REQUEST_URI stehen muss.
        hopka.net!

        Kommentar

        Lädt...
        X