[megoldva] apache2 + mod_rewrite + dupla url-encoding/escaping + ?!?!

Sziasztok!

Mar joideje hasznalom az apache2 mod_rewrite modulja't arra, hogy szep baratsagos url-eken keresztul lehessen honlapokat csinalni (sajnos a webszerverek me'g mindig azt hiszik hogy egyedi file-okat kell kiszolgalni). Szoval, egyszeru" a dolog:


<IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{REQUEST_URI} !/static/.*
        RewriteRule ^(.*)$ index.php?query=$1 [L,QSA]
</IfModule>

Es akkor a honlapnak (a /static kivetelevel) egy belepesi pontja van, az index.php, amiben pedig van egy ilyen (tobbek kozott):


$argv=explode("/",$_GET["query"]);
$argc=count($argv);
if ( $argv[$argc-1]=="" )
 {      unset($argv[$argc-1]);
        $argc--;
 }

Es akkor igy a felhasznalo altal beirt "http://honl.ap/abc/xyz/123" cimet azt $argc==3, $argv[0]=="abc", $argv[1]=="xyz" es $argv[2]=="123" tagokkal lehet elerni.

Egy gond van ezzel, hogyha vmelyik argumentum az eszke'pelt. konkretan, duplan probalja feloldani. Ha azt mondom, hogy nezzuk meg a http://honl.ap/test/abc%2B123-at, akkor abbol az apacs elso kozelitesben ugye "abc+123"-at csinalna (amit ugye jelent a fenti cim), viszont az $argv[] tombben ma'r "abc 123" jelenik meg. Ez meg ma'r egy kicsit sok a jobol. Ha a parameterek $_GET[]-tel mennek a't, pl http://honl.ap/vala/mi?ize=abc%2B123, akkor itt a $_GET["ize"] erteke az jo lesz, konkretan "abc+123", es nem szokozos. De a mod_rewrite-on keresztul masszivan atfuttatott reszeken ke'tszer oldja fel az urlencode()-n atesett dolgokat.

Persze csinalhatnam hogy a szerver a belso linkekekt urlencode(urlencode(...)) modon generalja le, de azert az megiscsak tu'l snassz lenne...

Vki latott ilyet? Nehany rtfm/google alapjan vegigneztem a megprobaltam a RewriteRule majd' osszes felteteles kapcsoljat (mint az L es a QSA, feljebb), de semmi, pedig elso"re (az rtfm alapjan) volt egy-ket biztato... Ami akar az is lehetne hogy "ne csinald meg 2x ugyanazt, lecci".

thx, A.

Hozzászólások

Valoban, elneztem. Az csak a queryparamban levo / miatt kellett, a teljes URL a server[request_uri]-bol volt kiszedve.
Rakerestem ujra hatha talalok valami tisztabb megoldast a regi helyett... http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_b (innen: http://drupal.org/node/284899 )
Meg nem probaltam ki, hatha segit.