Modrewrite规则会混淆变量

时间:2018-05-03 19:26:25

标签: regex .htaccess mod-rewrite

我想重定向以下示例网址:

http://example.com/phone/iphone-4-vs-iphone-5/vote/123

要:

http://example.com/product.php?category=phone&p1=iphone-4&p2=iphone-5&user=123

我在htaccess文件中尝试了以下ModRewrite规则:

RewriteRule ^(phone)/(.*)-vs-(.*)/vote/([1-9][0-9]*)$ /product.php?category=$1&p1=$2&p2=$3&user=$4 [L]

我在product.php档案中有这个:

<?php
   echo $_GET['category'];
   echo '<br />';
   echo $_GET['p1'];
   echo '<br />';
   echo $_GET['p2'];
   echo '<br />';
   echo $_GET['user'];
 ?>

PHP的预期输出:

phone
iphone-4
iphone-5
123

我得到的实际输出:

phone
iphone-4
iphone-5/vote/123

因此,重写规则有问题,因此它会将user变量附加到p2变量。

1 个答案:

答案 0 :(得分:1)

你的规则应该有效,但是你可以用这个非贪婪的量词和否定的类替换你的规则:

RewriteRule ^(phone)/(.+?)-vs-([^/]+)(?:/vote/([1-9][0-9]*))?/?$ product.php?category=$1&p1=$2&p2=$3&user=$4 [L,QSA,NC]