PUT 请求导致 403 Forbidden - 需要 Apache 来允许 PUT 请求

mma*_*tax 6 httpd apache-2.2

我正在构建一个 RESTFUL API,需要让 Apache 接受 PUT 请求。每当我输入一个 URL 时,我都会收到一个403 Forbidden错误。

curl -X PUT api.example.com/api/foo

我试图将以下内容添加到我的虚拟目录中(无济于事):


<Limit GET POST PUT DELETE HEAD OPTIONS>
    Order allow,deny
    Allow from all
</Limit>
<LimitExcept GET POST PUT DELETE HEAD OPTIONS>
    Order deny,allow
    Deny from all
</LimitExcept>

还有哪些其他配置设置可能导致这种情况?

编辑

我正在重写我的 URL,全部重写到 index.php,如下所示:


RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !\.
RewriteRule ^(.*)$ /api/index.php/$1 [L,QSA]

小智 5

将其添加到此文件夹中的 .htaccess 文件中

-- 对于阿帕奇 2.2

<Limit GET POST PUT OPTIONS DELETE PATCH HEAD>
    Order allow,deny
    Allow from all
</Limit>
<LimitExcept GET POST PUT OPTIONS DELETE PATCH HEAD>
    Order deny,allow
    Deny from all
</LimitExcept>
Run Code Online (Sandbox Code Playgroud)

-- 对于阿帕奇 2.4

<Limit GET POST PUT OPTIONS DELETE PATCH HEAD>
    Require all granted
</Limit>
<LimitExcept GET POST PUT OPTIONS DELETE PATCH HEAD>
    Require all denied
</LimitExcept>
Run Code Online (Sandbox Code Playgroud)

注意:您可以删除不需要的方法

  • 您确定您的 [`Require`](http://httpd.apache.org/docs/2.2/mod/core.html#require) 指令语法对于 Apache 2.2 已经有效(请参阅问题中的标签),因为据我所知,[Apacge 2.4](http://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require)引入了`Require all` (2认同)

Edu*_*nec 2

编辑:

将其添加到您的 Apache 配置中:

 Script PUT /api/index.php
Run Code Online (Sandbox Code Playgroud)

这假设您的实际处理程序脚本被调用index.php并且位于/api.