第一个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
作为结果?
答案 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'