Mark: kleines mod_rewrite-Problem

Hallo,

ich möchte mit mod_rewrite von http://example.com/xyz nach http://example.com/index.php?page=xyz umleiten. Dabei soll index.php selbst von der Regel ausgeschlossen werden und auch wenn nur http://example.com/ oder http://example.com/?foo=bar&bar=foo eingegeben wird, soll nicht umgeleitet werden.

So weit bin ich bis jetzt:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !^.*index.php$ [NC]
RewriteRule ^(.*)$ index.php?page=$1

Wie kann ich jetzt noch per RewriteCond einen leeren String nach http://example.com/ bzw. wie oben beschrieben http://example.com/?foo=bar&bar=foo ausfiltern?

Und noch ein Problem: wenn ich http://example.com/Lorem_ipsum. eingebe, steht in $_GET['page'] nur Lorem_ipsum ohne Punkt drin. Warum wird der Punkt abgeschnitten?

Danke!
Mark

  1. Guten Tag,

    So weit bin ich bis jetzt:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !^.*index.php$ [NC]
    RewriteRule ^(.*)$ index.php?page=$1

    Wie kann ich jetzt noch per RewriteCond einen leeren String nach
    http://example.com/ bzw. wie oben beschrieben http://example.com/?foo=bar&
    bar=foo ausfiltern?

    Du kannst mehrere RewriteCond-Direktiven angeben, die alle erfüllt sein müssen.

    Gruß
    Christoph Jeschke

    --
    Zend Certified Engineer
    Certified Urchin Admin
  2. Hi,

    Wie kann ich jetzt noch per RewriteCond einen leeren String nach http://example.com/ bzw. wie oben beschrieben http://example.com/?foo=bar&bar=foo ausfiltern?

    "Leer" waere ^$, und fuer den Querystring nach dem "Leeren" interessiert sich eine RewriteRule per se sowieso nicht.

    Und noch ein Problem: wenn ich http://example.com/Lorem_ipsum. eingebe, steht in $_GET['page'] nur Lorem_ipsum ohne Punkt drin. Warum wird der Punkt abgeschnitten?

    Das macht der Apache m.W. schon bevor er ueberhaupt mit dem Rewriting anfaengt, und mir ist auch keine Moeglichkeit bekannt, ihm das abzugewoehnen.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
    1. Hallo ChrisB,

      "Leer" waere ^$, und fuer den Querystring nach dem "Leeren" interessiert sich eine RewriteRule per se sowieso nicht.

      http://example.com/?foo=bar kann ich jetzt aufrufen. Aber bei http://example.com/Lorem_ipsum kommt ein 404er.

      Das macht der Apache m.W. schon bevor er ueberhaupt mit dem Rewriting anfaengt, und mir ist auch keine Moeglichkeit bekannt, ihm das abzugewoehnen.

      Hm, interessant... nur warum?

      Mark

      1. Hi,

        http://example.com/?foo=bar kann ich jetzt aufrufen. Aber bei http://example.com/Lorem_ipsum kommt ein 404er.

        Und wie sehen deine aktuellen Conditions und Rules aus?

        MfG ChrisB

        --
        „This is the author's opinion, not necessarily that of Starbucks.“
  3. echo $begrüßung;

    Nur ein Teilaspekt, weil du die anderen ja schon beantwortet bekamst:

    Dabei soll index.php selbst von der Regel ausgeschlossen werden

    Bist du sicher, dass du nur die index.php ausschließen willst? Üblicherweise hat man ja noch mehr Dateien und Verzeichnisse da liegen, die man einfach so durchreichen will, also nicht umschreiben will. Beispiele wären Bilder oder CSS-Dateien. Es ist dann günstiger, alle real existierenden Dateien und Verzeichnisse vom Umschreiben auszuschließen:

    RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d

    echo "$verabschiedung $name";

    1. Hallo dedlfix,

      ... alle real existierenden Dateien und Verzeichnisse vom Umschreiben auszuschließen:
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d

      Danke, das ist ein guter Tipp! Bleibt nur noch die Sache mit dem Punkt (http://example.com/Basta. wird nach http://example.com/index.php?page=Basta ohne Punkt weitergeleitet). Hat da jemand eine Idee, warum das so ist?

      Mark

      1. Bleibt nur noch die Sache mit dem Punkt (http://example.com/Basta. wird nach http://example.com/index.php?page=Basta ohne Punkt weitergeleitet). Hat da jemand eine Idee, warum das so ist?

        Weil es in dem Dateisystem auf welchem du den Apache zu laufen hast (Windows?) keine Dateinamen gibt, die nur mit einem Punkt enden.

        1. Hallo Bob,

          Weil es in dem Dateisystem auf welchem du den Apache zu laufen hast (Windows?) keine Dateinamen gibt, die nur mit einem Punkt enden.

          Tatsächlich, auf dem Linux-Server geht's! Danke Euch, das Problem ist damit gelöst.

          Hier nochmal für's Archiv:

          RewriteEngine On
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteRule ^(.*)$ index.php?page=$1

          Mark