Saya membangun API menggunakan PHP yang berjalan di Apache pada kotak CentOS. Saya mencoba membuat permintaan PUT ke v1/object/{objectID}/subobject/{subobjectID} tetapi saya mendapatkan kesalahan 405. Ketika saya membuat permintaan GET ke titik akhir yang sama, itu berfungsi. Ketika saya membuat permintaan PUT ke v1/object/{objectID} itu berfungsi. Untuk mempermudah, saya mengganti semua kode di api.php dengan pernyataan gema sederhana.

Isi api.php:

<?php
echo "got here";
?>

Isi .htaccess:

<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>

Di bawah ini adalah permintaan PUT yang saya buat dengan curl:

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

Hasilnya adalah sebagai berikut:

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>
1
user2395126 15 Desember 2017, 06:54

2 jawaban

Coba perubahan berikut di server Anda:

Buka file "/etc/httpd/conf/httpd.conf" Dan cari yang berikut ini:

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

Jika dikomentari, hapus # dan tambahkan opsi PUT

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

Kemudian simpan saja, restart server dan uji.

0
Valdeir Psr 15 Desember 2017, 07:05
Saya mencoba ini dengan menempatkan kode ke bagian dan memulai ulang httpd tetapi tidak berhasil. Apakah ada tempat yang lebih baik untuk meletakkannya?
 – 
user2395126
15 Desember 2017, 07:21

Ternyata saya membuat panggilan di mana API dulu disimpan di server - bukan ke tempat saat ini. Terlalu banyak menyalin dan menempel, tidak cukup memperhatikan detail. Setelah menemukan kesalahan yang sangat memalukan ini, saya menyadari satu alasan mengapa saya tidak berpikir untuk memeriksa ulang URL saya adalah karena saya mendapatkan kode kesalahan 405 Metode Tidak Diizinkan, bukan kode kesalahan 404 Tidak Ditemukan..

Demi mempelajari sesuatu dengan mengorbankan kepercayaan diri dan kewarasan saya, saya telah membuka pertanyaan baru untuk menemukan jawabannya di sini di Server Fault: https://serverfault.com/questions/888400/why-does- apache-return-a-405-error-code-on-a-put-request-to-a-file-or-directory

0
user2395126 16 Desember 2017, 07:05