Apache mod_rewrite %26 ( and ) és %2F ( / ) jel
Van ez a rewrite:
ReWriteCond %{REQUEST_FILENAME} !-f
ReWriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?:valami/)?([^/]*)/?(.*)/?$ index.php?module=$1¶meters=$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.
■ ReWriteCond %{REQUEST_FILENAME} !-f
ReWriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(?:valami/)?([^/]*)/?(.*)/?$ index.php?module=$1¶meters=$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.
Megfejtés
http://fgiasson.com/blog/index.php?cat=118
megfejtés: mikor az urlt állítom elő, akkor kétszer kell url_encode.
Egyébként a %2F-re a weblabor is elszáll. :)