我遇到了mod_rewrite的问题。
环境:
PHP版本:5.2.6
Lighttpd版本:1.4.24
有一个PHP脚本,它采用这样的参数:
获取信息(GET)
注意:参数数量各不相同,尚未指定
remote.host/api.php?method=get&format=json&q=query1?q2=query2
设置信息(POST)
remote.host/api.php
parameter1=value1¶meter2=value2
api.php脚本
<?php
var_dump($_GET);
var_dump($_SERVER["REQUEST_URI"]);
?>
问题
现在我想修改get和set URL,如下所示:
获取信息
remote.host/api/get/json/?q1=query1&q2=query2
为此,我在lighttpd.conf中制定了以下规则:
url.rewrite-once = (
"(?<=/get/json/\?)(?<=\?).*" => "/api.php?method=get&format=json"
)
更新,阅读编辑
对于查询http://remote.host/api/get/json/?test1=1&test2=foo
,脚本会返回
array(2) {
["method"]=>
string(3) "get"
["format"]=>
string(4) "json"
}
string(32) "/api/get/json/?test1=1&test2=foo"
所需的结果是默认情况下所有参数都在$_GET
。
我已经阅读了有关在此处传递get参数的内容URL rewrite in lighttpd
但我不知道如何将它应用于我的规则以及是否可以使用任意数量的参数。
修改
我的新规则现在看起来像这样:
url.rewrite-once = (
"^/api/(set)/(json|xml)/(\?(.+))?" => "api.php?method=$1&format=$2&$3"
)
现在,api.php输出是:
array(4) {
["method"]=>
string(3) "set"
["format"]=>
string(4) "json"
["?test1"]=>
string(4) "foo"
["test2"]=>
string(3) "bar"
}
string(35) "/api/set/json/?test1=foo&test2=bar"
现在看起来好多了,但我怎么能摆脱“?”在第二个数组元素?
感谢您的帮助!