mod重写问号和&符号

时间:2013-07-09 14:39:36

标签: php mod-rewrite

第一个GET参数应该有一个?。当我尝试这个网址时,我无法$_GET['type']

http://localhost/category/general?type=pages&v=1

它仅适用于&,当我使用$_GET['type']时,我会pages

http://localhost/category/general&type=pages&v=1

这是我的mod重写..

RewriteRule ^category/([A-Za-z0-9-]+)(\?type=[A-Za-z0-9-]+)?([^.]+)?/?$ /category.php?c=$1&type=$2&query=$3 [L]

我如何解决这个问题,以便这个网址http://localhost/category/general?type=pages&v=1允许我$_GET['type'] pages作为结果?

2 个答案:

答案 0 :(得分:0)

我认为这里的问题是你的RewriteRule试图匹配查询字符串的一部分,这是不可能的。

如果我正确理解您的问题,您希望服务器将http://example.com/category/general?type=pages&v=1的请求解释为http://example.com/category.php?c=general&type=pages&query=1

要匹配查询字符串,您需要在规则前添加条件。以下应该有效:

RewriteCond %{QUERY_STRING} type=([^&]+)
RewriteCond %{QUERY_STRING} v=([^&]+)
RewriteRule ^category/([^/]+) /category.php?c=$1&type=%1&query=%2

前两行是前置条件,表明请求的URL需要同时包含type=v=作为查询字符串的一部分。最后一行重写了请求。这意味着只有符合以下条件才会重写URL:category/SOMETHING?type=SOMETHING&v=SOMETHING

答案 1 :(得分:0)

用以下内容替换现有的RewriteRule:

RewriteRule ^category/([A-Za-z0-9-]+)(&.+)$ /category.php?c=$1$2 [L,NC]

这会使您的所有$_GET变量可用于category.php

e.g。对于您的URI:http://localhost/category/general&type=pages&v=1此解决方案将提供以下查询字符串:

$_SERVER["QUERY_STRING"] = 'c=general&type=pages&v=1'