0

我的重写规则如下:

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=。重写的 URL 正确返回,但实际的 URL 是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

4

1 回答 1

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']);
于 2013-03-05T11:17:04.440 回答