1

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&parameter2=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番目の配列要素で?

ご協力いただきありがとうございます!

4

0 に答える 0