DeWitt: mod_rewrite demaskiert URL - wie wieder maskieren?

Hallo SELFHTML-Gemeinde,

Ich habe ein virtuelles Verzeichnis für ein Photo-Album, das ich mittels .htaccess und mod_rewrite wie folgt verwalte:

Auszug aus der .htaccess-Datei:

RewriteRule ^photos/([^/]{1,}) photos.pl?album=$1

Damit soll der User von 'photos/Album1' auf 'photos.pl?album=Album1' weitergeleitet werden. Klappt so weit auch.

Problematisch wird es, wenn der Alben-Name Sonderzeichen wie z.B. '&' enthält. Auch wenn die Sonderzeichen in der aufgerufenen URL maskiert sind - z.B. 'photos/Album1%262' - , löst mod_rewrite diese Maskierung auf, so dass auf 'photos.pl?album=Album1&2' weitergeleitet wird, und das Perl-Script somit den Query-String falsch interpretiert.

Gibt es eine Möglichkeit, diese Demaskierung zu verhindern oder wieder rückgängig zu machen?

Ciao,
David //aka DeWitt

--
selfcode ie:% fl:( br:< va:) ls:} fo:| rl:( n4:° ss:) de:] js:| ch:] sh:( mo:| zu:(
<< Life is just a moment in eternity, yet every life echoes there >>
  1. Hallo,

    Problematisch wird es, wenn der Alben-Name Sonderzeichen wie z.B. '&' enthält. Auch wenn die Sonderzeichen in der aufgerufenen URL maskiert sind - z.B. 'photos/Album1%262' - , löst mod_rewrite diese Maskierung auf, so dass auf 'photos.pl?album=Album1&2' weitergeleitet wird, und das Perl-Script somit den Query-String falsch interpretiert.

    Gibt es eine Möglichkeit, diese Demaskierung zu verhindern oder wieder rückgängig zu machen?

    Das ist ein bekannter Bug von mod_rewrite, siehe http://php.net/urlencode, dort der Nutzerkommentar von:

    sebastiaan at netomzet dot nl
    05-Mar-2007 09:04
    quote: "Apache's mod_rewrite and mod_proxy are unable to handle urlencoded URLs properly - http://issues.apache.org/bugzilla/show_bug.cgi?id=34602"

    The most simple solution is to use urlencode twice!

    echo urlencode(urlencode($var));

    Apache's mod_rewrite will handle it like a normal string using urlencode once.

    Dort wird als Workaround vorgeschlagen, doppelt zu encodieren, also bei Dir 'photos/Album1%25262'. Das wird dann durch mod_rewrite zu 'photos.pl?album=Album1%262'.

    Auf der im Nutzerkommentar verlinkten apache.org/bugzilla-Seite finden sich auch zwei Patches für den Apache. Das bringt natürlich nur was, wenn man den Server selbst administriert oder den Admin zum Patchen überreden kann.

    viele Grüße

    Axel

    1. Auf der im Nutzerkommentar verlinkten apache.org/bugzilla-Seite finden sich auch zwei Patches für den Apache. Das bringt natürlich nur was, wenn man den Server selbst administriert oder den Admin zum Patchen überreden kann.

      Danke, ein Glück läuft meine Seite auf dem Server eines Freundes, den sollte ich zum Patchen überreden können :)

      viele Grüße

      Axel

      Ciao,
      David //aka DeWitt

      --
      selfcode ie:% fl:( br:< va:) ls:} fo:| rl:( n4:° ss:) de:] js:| ch:] sh:( mo:| zu:(
      << Life is just a moment in eternity, yet every life echoes there >>