2017-12-15 11 views
1

CentOSボックス上のApacheで動作するPHPを使用してAPIを構築しました。 v1/object/{objectID}/subobject/{subobjectID}へのPUTリクエストを作成しようとしていますが、405エラーが発生しています。私は同じエンドポイントにGET要求をすると動作します。私がv1/object/{objectID}へのPUT要求をするときに動作します。簡単にするために、私はapi.phpのすべてのコードを単純なecho文で置き換えました。 api.phpの405 PUTリクエストでのPHPのmod-rewriteによるリクエスト

内容:.htaccessファイルの

<?php 
echo "got here"; 
?> 

内容:以下

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule v1/(.*)$ v1/api.php?request=$1 [QSA,NC,L] 
</IfModule> 

私はカールを作っていますPUT要求である:

curl -i -X PUT -d '{"var1":"val1","var2":"val2"}' "http://x.x.x.x/api/v1/object/1/subobject/1?apiKey=somekey&secretToken=secret" 

結果は次のようになります。

HTTP/1.1 405 Method Not Allowed 
Date: Fri, 15 Dec 2017 03:31:21 GMT 
Server: Apache/2.2.15 (CentOS) 
Allow: GET,HEAD,POST,OPTIONS,TRACE 
Content-Length: 359 
Connection: close 
Content-Type: text/html; charset=iso-8859-1 

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>405 Method Not Allowed</title> 
</head><body> 
<h1>Method Not Allowed</h1> 
<p>The requested method PUT is not allowed for the URL /api/v1/object/1/subobject/1.</p> 
<hr> 
<address>Apache/2.2.15 (CentOS) Server at x.x.x.x Port 80</address> 
</body></html> 

答えて

0

サーバー上の次の変更を試してみてください:ファイルを開く「ある/etc/httpd/conf/httpd.conf」

そして次を探します。

<Limit GET POST OPTIONS> 
     Order allow,deny 
     Allow from all 
</Limit> 

それがコメントアウトされている場合は、削除とそれからちょうどサーバーおよびテストを再起動し、保存PUTオプション

<Limit GET POST OPTIONS PUT> 
     Order allow,deny 
     Allow from all 
</Limit> 

を追加します。

+0

私はこのコードをセクションを開き、httpdを再起動しても動作しませんでした。それを置くのに良い場所はありますか? – user2395126

0

APIがサーバー上に保存されていた場所で呼び出されていたことが判明しました。コピーと貼り付けが多すぎます。細部に注意を払う必要はありません。この非常に恥ずかしい間違いを発見した後、私は自分のURLを再確認するとは思わなかった理由の1つが、405 Method Not Allowedエラーコードではなく、404 Not Foundエラーコードではないことに気づいた。

私の自信と私の誠意を犠牲にして何かを学ぶ私はサーバーフォールトでこれに対する答えを見つける新しい質問を開いた:https://serverfault.com/questions/888400/why-does-apache-return-a-405-error-code-on-a-put-request-to-a-file-or-directory

関連する問題