Eddie: mod_rewrite

Hallo allerseits,
ich wuerde gerne per mod_rewrite folgende Umwandlungen vornehmen:

/legal/disclaimer.html => /index.php?m=d
/legal/imprint.html => /index.php?m=i

Das ist ein einfaches Beispiel, im Normalfall habe ich wesentlich laengere Pfade und nicht nur 2 Dateien. Darum will ich auch jeweils in einer ersten RewriteRule nur den Dateinamen extrahieren.

======================

Pfad == /legal/... ?

RewriteCond %{REQUEST_URI} ^/legal/.*.html$
    RewriteRule ^legal/(.*).html$ $1

jetzt sollte nur noch der Dateiname "disclaimer" oder "imprint" uebrig sein.

RewriteRule ^disclaimer$ /index.php?m=d [L]
    RewriteRule ^imprint$ /index.php?m=i [L]

Das funktioniert aber so nicht, denn anstatt nur "imprint", steht jetzt ploetzlich "imprint/imprint.html" in dem Ausdruck.
Stattdessen wuerde also
    RewriteRule ^imprint/imprint.html$ /index.php?m=i [L]
funktionieren.

Was mache ich denn falsch?

Danke fuer Hilfe,
Eddie

  1. Hallo Eddie,

    Das funktioniert aber so nicht, denn anstatt nur "imprint", steht jetzt ploetzlich "imprint/imprint.html" in dem Ausdruck.

    Hast Du RewriteBase richtig gesetzt?

    Viele Grüße,
    Christian

    1. Hallo Christian,

      Hast Du RewriteBase richtig gesetzt?

      Nein, hab ich garnicht gesetzt. Und ehrlich gesagt habe ich auch nicht verstanden, was das eigentlich bewirkt. Waere wirklich nett, wenn Du mir da einen Tipp geben koenntest!

      Danke, Eddie

      1. Hallo Eddie,

        Nein, hab ich garnicht gesetzt. Und ehrlich gesagt habe ich auch nicht verstanden, was das eigentlich bewirkt. Waere wirklich nett, wenn Du mir da einen Tipp geben koenntest!

        Wenn Du mod_rewrite innerhalb von .htaccess verwendest, dann brauchst Du RewriteBase (es sei denn, Du spuckst nur absolute HTTP-Weiterleitungen aus oder hast so etwas wie [F] oder so).

        Denn: Wenn Du Deine Regel

        RewriteCond %{REQUEST_URI} ^/legal/.*.html$
            RewriteRule ^legal/(.*).html$ $1

        hast, dann bewirkt letztere, dass auf 'imprint' umgeschrieben wird. Allerdings: Wo zum Teufel soll imprint vorhanden sein? (Warum der Apache hier gerade imprint/imprint.html macht, ist mir allerdings auch unerklärlich)

        Gibst Du nun

        RewriteBase /

        an, dann weiß der Apache, dass sich 'imprint' in / befindet. Würdest Du RewriteBase /hallo angeben, dann würde der Apache nach /hallo/imprint umleiten. Der Apache weiß nämlich auf Verzeichnisebene (.htaccess) nicht, welche URI zu dem Verzeichnis gehört. (kann er auch gar nicht)

        Viele Grüße,
        Christian