mod_rewrite htaccess URL Manipulation

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

  • mod_rewrite htaccess URL Manipulation

    Hallo zusammen,

    ich hoffe, ich bin mit meiner Frage in diesem Topic richtig, falls nein, bitte entsprechend verschieben ;-)

    Zur Frage:

    Gegeben sei folgender Inhalt meiner .htaccess:

    Code:
    Options -MultiViews
    RewriteEngine on
    
     
    #Regel 1 - Leite alle *.html aus Root Verzeichnis auf die Produktseite weiter
    RewriteRule ^(.+)\.html$                 /marketplace/product.php?itemID=$1 [L] 
    
    #Regel 2 - Leite alle *.html aus dem Bestseller Verzeichnis auf die bestseller.php weiter
    RewriteRule ^bestseller/(.+)\.html$      /marketplace/bestseller.php?itemID=$1 [L]
    
    #Regel 3 - Leite alle *.html aus dem Sonderaktionen Verzeichnis auf die sonderaktionen.php weiter
    RewriteRule ^sonderaktionen/(.+)\.html$      /marketplace/sonderaktionen.php?itemID=$1 [L]
    Regel 1 funktioniert tadellos wie gewünscht.

    Die Regeln 2 und 3 laufen jedoch immer wieder auf die product.php wie in Regel 2 definiert.

    Kann ich nach meiner oben genannter Syntax überhaupt die Regeln 2 und 3 definieren oder muss ich eine neue htaccess in jeder Unterverzeichnis legen (Bestseller/Sonderaktionen)?

    Warum wird bei meinen Regeln 2 und 3 immer auf die product.php gemappt? Wird die Regel 1 hier "vererbt"?

    Viele Dank im Voraus ;-)

  • #2
    Bin kein htaccess-Profi, aber ich würde sagen, dass das Problem in der Reihenfolge liegt.

    Was du grade definierst, sagt dem Server:

    Regel 1: Leite alles nach product.php

    Regel 2: Leite alles, was nach "bestseller" aussieht, nach besteller...

    Regel 3: Leite alles, was nach "sonderaktion" aussieht, nach sonderaktion...

    Du siehst den Denkfehler bestimmt selbst. Regel 1 fängt einfach ALLES vorher ab, bevor es überhaupt zu Regel 2 oder 3 kommt.

    Mach es so; Dreh die Regeln um. Zuerst alle speziellen und dann immer "unspezifischer" werden.
    This is what happens when an unstoppable force meets an immovable object.

    Kommentar


    • #3
      Die Frage ist ja schon etwas älter, dennoch eine Bemerkung dazu. Die Antwort ist grundsätzlich richtig, doch es wäre wohl auch so gegangen. Der Punkt steht ja als Metazeichen für beliebige Zeichen und leitet somit auch verzeichnis/seite.html weiter.

      Code:
      #Regel 1 - Leite alle *.html aus Root Verzeichnis auf die Produktseite weiter, 
                #wobei Slashes nicht im Pfad vorkommen dürfen.
      
      RewriteRule ^([^/]+)\.html$ /marketplace/product.php?itemID=$1 [L]

      Kommentar

      Lädt...
      X