2017-12-15 13 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에 대한 수정 요청 (mod-rewrite 포함)

내용 : htaccess로의

<?php 
echo "got here"; 
?> 

내용 :

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

결과는 다음과 같습니다 아래

<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 요청입니다 다음과 같이 :

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> 

제거 #와는 풋 옵션

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

를 추가 그럼 그냥, 저장 서버와 테스트를 다시 시작합니다.

+0

나는이 코드를 섹션을 실행하고 httpd를 다시 시작했지만 작동하지 않습니다. 그것을 넣을 수있는 더 좋은 곳이 있습니까? – user2395126

0

API가 서버에 저장되어 있던 곳에서 전화를 걸었습니다. 현재 존재하는 곳이 아닙니다. 복사 및 붙여 넣기가 너무 많아서 세부 사항에주의를 기울이지 않아야합니다. 이 매우 난처한 실수를 발견 한 후 필자는 URL을 다시 확인하지 않은 이유 중 하나가 405 메소드가 허용되지 않은 오류 코드가 아니라 404 오류 코드가 아닌 오류임을 알게되었습니다.

내 자신감과 내 온정을 희생하여 무언가를 배우기 나는 서버 오류에 대한 답을 찾기 위해 새로운 질문을 열었다. https://serverfault.com/questions/888400/why-does-apache-return-a-405-error-code-on-a-put-request-to-a-file-or-directory