SE: Problem mit Slash (/) in RewriteRule

Hallo allerseits,

ich habe folgendes RewriteRule:
RewriteRule ^suche_([^_]*).html index.php?suche=$1 [L]

Dieses funktioniert auch einwandfrei. Es streikt aber, sobald als Suchparameter ein maskierter Slash (%2F) enthält. Der Apache liefert dann einen 404.

Gibt es hierfür eine Lösung?

  1. Hi,

    ich habe folgendes RewriteRule:
    RewriteRule ^suche_([^_]*).html index.php?suche=$1 [L]

    das Problem hast du schon klar erkannt.

    Dieses funktioniert auch einwandfrei. Es streikt aber, sobald als Suchparameter ein maskierter Slash (%2F) enthält. Der Apache liefert dann einen 404.

    Natürlich, er kann nicht anders. Auf den Request
      /suche_montag/dienstag.html
    wird der Apache ein Verzeichnis /suche_montag suchen, und darin die Datei dienstag.html ausliefern wollen. Die URL-Codierung mit %2F hilft hier nicht, weil die sofort beim Analysieren des Requests decodiert wird.

    Gibt es hierfür eine Lösung?

    Für dieses Detailproblem nicht, aber vielleicht für die gesamte Aufgabe:
    Ändere dein URL-Schema auf /suche/foobar (tausche also den Unterstrich gegen einen normalen Slash). Dann kann /suche ein PHP-Script sein, das automatisch alles, was nach /suche in der URL folgt, als $_SERVER['PATH_INFO'] erhält.

    Vorteile:
     * Das ".html" am Ende fällt weg (okay, wäre bei deinem Ansatz auch möglich)
     * Der unschöne Unterstrich ist weg
     * Diese Lösung käme sogar ohne mod_rewrite aus

    So long,
     Martin

    --
    Ich liebe Politiker auf Wahlplakaten.
    Sie sind tragbar, geräuschlos, und leicht wieder zu entfernen.
      (Loriot, deutscher Satiriker)
    1. Ok, vielen Dank für die Auskunft :)

      Gruß
      Sebastian