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 URL と 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 で get parameters here URL rewriteを渡すことについて読んだことがあります
が、それをルールに適用する方法と、任意の数のパラメーターで機能するかどうかはわかりません。
編集:
私の新しいルールは次のようになります。
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"
これで見栄えが良くなりましたが、どうすれば「?」を取り除くことができますか? 2番目の配列要素で?
ご協力いただきありがとうございます!