2017-11-02 16 views
-1

こんにちは私は、URLが私のlocalhostから要求されたときにリクエストメソッドを取得しようとしています。私はhttp://localhost/API2/products.php?product_id=1http://localhost/API2/products.php/products/1になるようにURLの書き換えを行った$ request_method = $ _ SERVER ["REQUEST_METHOD"];メソッドとしてGETを保持する必要があります。しかしむしろ毎回ゼロになる。要求方法GETSゼロ値

my.htaccessファイルには、これらのURLのルールを保持している:learn.phpで

 RewriteEngine On # Turn on the rewriting engine 
     RewriteRule ^products/?$ products.php [NC,L] 
     RewriteRule ^products/([0-9]+)/?$ products.php?product_id=$1 [NC,L] 

マイカールコマンドは、次のとおりです。

<?php 
    $url = 'http://localhost/API2/products'; 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_HTTPGET, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $response_json = curl_exec($ch); 
    curl_close($ch); 
    $response=json_decode($response_json, true); 

    ?> 

ので、私はそれもないlearn.phpである私のcurlコマンドを実行すると$ request_method = $ _ SERVER ["REQUEST_METHOD"]リクエストメソッドがゼロの値を保持しているため、私には何らかのデータが表示されます。

+0

は、あなたの質問は* product.phpのproduct_id = 1 *に*製品/ 1 *から言って、まだあなたのリダイレクトコードは反対をし...?とにかく、$ _GETはURLが?key = valueの形式である場合にのみ値を含みます。/page/key/valueには、$ _GETには何もありません。 – Nic3500

+0

問題は、curlコマンドをlearn.phpファイルに入れて実行したときに、POSTポストケースを実行してrequest_methodが正しい値を取得していないことが判明した場合など、スイッチケースに入ることはありません。 – Rahila

+0

または私のカール要求が実行されていないと思います。何か案が? – Rahila

答えて

0

のMultiViews無効にすることを追加します。

を サーバが/ some/dir/fooへのリクエストを受信した場合:有効にすると、MultiViewsオプションが何をするかを説明し、

Options -MultiViews 

Apache docs on mod_negotiationを/ some/dir/fooが でなければ、サーバーは foo。*という名前のすべてのファイルを探してディレクトリを読み取り、それらのファイルにすべて という名前のファイルを効果的に作成し、それらを割り当てます同じメディアタイプとコンテンツエンコードの場合は、クライアントがその名前の1つを要求した場合には が持ちます。それから がクライアントの要件に最も適したものを選択し、 というドキュメントを返します。

使用:?

# disable products -> products.php 
Options -MultiViews 
# Turn on the rewriting engine 
RewriteEngine On 
RewriteRule ^products/?$ products.php [NC,L] 
RewriteRule ^products/([0-9]+)/?$ products.php?product_id=$1 [NC,L] 
+0

これは、私のリポジトリから任意のPHPファイルを実行しようとすると、むしろ内部サーバエラーを引き起こします。問題は、curlコマンドが実行されていないということです。つまり、server_requestメソッドはGET、POST、PUTまたはDELETEを保持しません。あなたがそれを手伝ってくれるならば。 – Rahila

+0

mod_negotiation(すなわちMultiViews)はmod_rewriteの前にURLを処理するためです。 – Croises

+0

キャッシュをクリアするか、他のブラウザで試してみてください! – Croises

関連する問題