2013-03-05 75 views
0

我重寫規則如下:mod_rewrite的發送不正確的結果

RewriteRule ^groups/([0-9]+)/pg:([0-9]+);cr:(0|1);r:([a-z0-9-]+);rv:(0|1);eu:(0|1);fr:(0|1);de:(0|1);it:(0|1);ru:(0|1);es:(0|1);br:(0|1);la:(0|1);us:(0|1);au:(0|1)$ index.php?mod=groups&groups=$1&pg=$2&crossrealm=$3&realm=$4&reverse=$5&eu=$6&fr=$7&de=$8&it=$9&ru=$10&es=$11&br=$12&la=$13&us=$14&au=$15 [NC,L]

成功地做了重定向,然而,$_GET發送顯示不正確的結果:

$_GET: 
array (size=16) 
    'mod' => string 'groups' (length=6) 
    'groups' => string '117' (length=3) 
    'pg' => string '1' (length=1) 
    'crossrealm' => string '1' (length=1) 
    'realm' => string 'aegwynn' (length=7) 
    'reverse' => string '0' (length=1) 
    'eu' => string '1' (length=1) 
    'fr' => string '0' (length=1) 
    'de' => string '0' (length=1) 
    'it' => string '0' (length=1) 
    'ru' => string '1170' (length=4) 
    'es' => string '1171' (length=4) 
    'br' => string '1172' (length=4) 
    'la' => string '1173' (length=4) 
    'us' => string '1174' (length=4) 
    'au' => string '1175' (length=4) 

沒有人有任何的想法什麼可能導致這個問題,以及它如何解決?

EDIT:錯誤以mod_rewrite部分開始,該部分從$10開始,即&ru=。重寫的網址正確返回,但實際的網址爲http://localhost/index.php?mod=groups&groups=117&pg=1&crossrealm=1&realm=aegwynn&reverse=0&eu=1&fr=0&de=0&it=1&ru=1170&es=1171&br=1172&la=1173&us=1174&au=1175

+0

請問你的HTTP調用的樣子? – simplyray 2013-03-05 10:18:45

+0

抱歉無知,但你能告訴我如何檢查這個嗎?這是一個我沒有太多知識的領域。 – 2013-03-05 10:21:30

+0

當然,換句話說:瀏覽器中指向這個腳本的URL是什麼? – simplyray 2013-03-05 10:23:47

回答

2

mod-rewrite不允許您捕獲超過9個參數(從$1$9)。

在你的情況下,$10重新命名爲($1)0,這就是爲什麼你得到'1170'。

你最好將整個請求的URI與PHP爆炸是:

list(
    $_GET['mod'], 
    $_GET['groups'], 
    $_GET['pg'], 
    $_GET['crossrealm'], 
    $_GET['realm'], 
    $_GET['reverse'], 
    $_GET['eu'], 
    $_GET['fr'], 
    $_GET['de'], 
    $_GET['it'], 
    $_GET['ru'], 
    $_GET['es'], 
    $_GET['br'], 
    $_GET['la'], 
    $_GET['us'], 
    $_GET['au'] 
) = explode('/', $_GET['params']); 
+0

+1當然。好的。 – 2013-03-05 11:17:51

+0

剛剛回復@faa,我試着壓縮參數並使用php的explode(),結果證明*是解決方案。謝謝! – 2013-03-05 11:19:38