6

mod_rewrite を使用して、PHP で小さな REST API を作成しようとしています。

私の質問は次のとおりです: HTTP DELETE と PUT を処理するにはどうすればよいですか? たとえば、URL は次のようになります: /book/1234

ここで、1234 は書籍の一意の ID です。この ID (1234) を、ID をパラメーターとして book.php に「リダイレクト」したいと思います。PHPスクリプトでPUTおよびDELETE変数を読み取る方法はすでに知っていますが、mod_rewriteでこの書き換えルールを設定するにはどうすればよいですか?

何か案は?

編集: GET の書き換え規則は次のようになります。

RewriteRule book/([0-9]+) book.php?id=$1 [QSA] 

PUT と DELETE のこの「パラメータ転送」を行うにはどうすればよいですか? 私が知る限り、HTTP POST、PUT、DELETE は HTTP リクエスト ボディを使用してパラメータ値を送信します。したがって、HTTP 要求本文にパラメーターを追加する必要があると思います。しかし、mod_rewrite でそれを行う方法がわかりません。

DELETE と GET を混在させることはできますか?

RewriteCond %{REQUEST_METHOD} =DELETE
RewriteRule book/([0-9]+) book.php?id=$1 [QSA] 

次に、book.php で $_GET['id'] を使用して書籍 ID を取得します。HTTP HEADER で HTTP METHOD が DELETE であると示されている場合でも同様です。うまくいかないようです...

4

2 に答える 2

3

DELETEとGETを混在させることはできますか?

はい。リライトルールでは、リクエストメソッドやPUT本体についてはまったく気にする必要はありません。

あなたの例では、これは次のことを意味します。

mod_rewrite

RewriteRule book/([0-9]+) book.php?id=$1 [QSA]

HTTPリクエスト

PUT /book/1234
=> PUT /book.php?id=1234

PHPスクリプト

$id = intval($_GET['id']);
if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
    // yes, it is. go on as usual
}

さらに明確にするために:GETパラメーターとPUT / POST / DELETEパラメーターの違いは、前者がURLの一部であり、後者がリクエスト本文の一部であるということです。mod_rewrite URLを変更するだけで、本文には触れません。

于 2013-02-13T12:15:36.977 に答える