我遇到了 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
默认情况下所有参数都在。我已经阅读了一些关于在 lighttpd 中通过 URL rewrite传递 get 参数的内容,
但我不知道如何将它应用于我的规则,以及它是否适用于任意数量的参数。
编辑:
我的新规则现在看起来像这样:
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"
现在看起来好多了,但我怎样才能摆脱“?” 在第二个数组元素中?
谢谢你的帮助!