Fritz: doppelte trailing slashes entfernen

Hallo,

mit folgender

RewriteRule ^(.*[^/])//$ /$1/ [R=301,L]

in der .htaccess gelingt es mir, doppelte trailing slashes von URLs zu entfernen. Aber nur, wenn ich ein Verzeichnis aufrufe:
http://example.com/verzeichnis//

Bei
http://example.com//
schaffe ich es einfach nicht.

Kann bitte jemand einem alten Mann über die Straße helfen.

Gruß Fritz

--
ie:( fl:( br:? va:) ls:< fo:| rl:? ss:{ de:> js:| mo:} zu:}
http://webdesign.weisshart.de/
  1. Hi,

    mit folgender

    RewriteRule ^(.*[^/])//$ /$1/ [R=301,L]

    in der .htaccess gelingt es mir, doppelte trailing slashes von URLs zu entfernen.

    Wozu? Gibt es derart viele falsche Links auf deine Seiten?
    Normalerweise kommt der Apache doch auch mit mehrfachen Slashes klar.

    Aber nur, wenn ich ein Verzeichnis aufrufe:
    http://example.com/verzeichnis//

    Bei
    http://example.com//
    schaffe ich es einfach nicht.

    Wenn obiges Pattern greift (bin mir da gerade nicht ganz sicher, aber der REQUEST_URI muesste ja eigentlich // lauten) - dann hat $1 wohl keinen Wert. Und kein Wert zwischen zwei Slashes eingesetzt ergibt was ...?

    MfG ChrisB

  2. Hi Fritz,

    RewriteRule ^(.*[^/])//$ /$1/ [R=301,L]

    Bei http://example.com// schaffe ich es einfach nicht.

    Das liegt an folgendem Verhalten von RewriteRule, nachzulesen im Apache Manual zu RewriteRule, Abschnitt "Per-directory Rewrites":

    When using the rewrite engine in .htaccess files the per-directory prefix
      (which always is the same for a specific directory) is automatically removed
      for the pattern matching and automatically added after the substitution has
      been done.

    In deinem Fall, wenn der Request also // lautet, wird der erste Slash nicht mit in die RewriteRule einbezogen. Am einfachsten wäre wohl, wenn du hier noch eine zweite RewriteRule hinzufügst:

    RewriteRule ^/$ / [R=301,L]

    Eventuell mal mit absoluter URL probieren, falls es so nicht funktioniert.

    Viele Grüße,
      ~ Dennis.