ugrás a tartalomhoz

Apache mod_rewrite %26 ( and ) és %2F ( / ) jel

cadmagician · 2007. Már. 1. (Cs), 08.42
Van ez a rewrite:
ReWriteCond %{REQUEST_FILENAME} !-f
ReWriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?:valami/)?([^/]*)/?(.*)/?$ index.php?module=$1&parameters=$2 [QSA]
ez úgy működik, hogy visszaadja hívott modult, meg a többit. pl:

valami/kereses/adat1:valami/adat2:valami2/


Array
(
[module] => kereses
[parameters] => adat1:valami/adat2:valami2/
)

ebből tudom, hogy a keresés modult kell betölteni, és az adat1=valami, adat2=valami, persze még fel kell dolgozni.

Gebasz van, ha ilyet kap:
valami/kereses/adat1:valami%26ez/adat2:valami2%26az/
%26 = &
ekkor ezt kapom:

Array
(
[module] => kereses
[parameters] => adat1:valami
[ez/adat2:valami2] =>
[az/] =>
)

tehát megtöri az "&" jelnél ami %26, hiába van urlencode

továbbá gáz még, ha ilyet kap:

valami/kereses/valami:%2F/ =>404 object not found

%2F = /

Szal hogy lehet mind a %26 és a %2F esetében is működésre bírni a rewriteot?

Sőt ezzel a legegyszerűbbel is ugyanez a baj:

ReWriteCond %{REQUEST_FILENAME} !-f
ReWriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?module=$1 [QSA]

Köszi.
 
1

Biztos kell?

kicsy · 2007. Már. 1. (Cs), 15.29
Szerintem onnan közelítsd meg a problémát, hogy biztos szükséged van-e & és / jelekre a paraméterekben.. Query string-ben én alapból csak alfanumerikus karaktereket engednék, meg esetleg kötőjelet és pontot.
Ha valóban kellenek, akkor próbáld ki a RewriteMap direktívát, ezzel tudod használni az escape és unescape függvényeket.
Valamint egy RewriteLog-ot is érdemes beletenni, a hibakeresést megkönnyítendő :)