如何在Apache2和PHP中启用和使用HTTP PUT和DELETE?

它应该是如此简单。我已经跟踪了所有可以找到的教程和论坛,但是无法正常工作。我只想在Apache2上用PHP构建RESTful API。

在我的VirtualHost指令中,我说:

<Directory />

AllowOverride All

<Limit GET HEAD POST PUT DELETE OPTIONS>

Order Allow,Deny

Allow from all

</Limit>

</Directory>

但是我向服务器发出的每个PUT请求都得到了不支持的405方法。

有人提倡使用Script指令,但是由于我使用的是mod_php(而不是CGI),所以我不明白为什么会这样。

人们提到使用WebDAV,但在我看来这似乎太过分了。毕竟,我不需要DAV锁定,DAV文件系统等。我要做的就是将请求传递给PHP脚本并自己处理一切。我只想为干净的语义启用PUT和DELETE。

回答:

您无需配置任何内容。只要确保请求映射到您的PHP文件并使用带有路径信息的请求即可。例如,如果您在根目录中handler.php具有以此内容命名的文件:

<?php

var_dump($_SERVER['REQUEST_METHOD']);

var_dump($_SERVER['REQUEST_URI']);

var_dump($_SERVER['PATH_INFO']);

if (($stream = fopen('php://input', "r")) !== FALSE)

var_dump(stream_get_contents($stream));

以下HTTP请求将起作用:

Established connection with 127.0.0.1 on port 81

PUT /handler.php/bla/foo HTTP/1.1

Host: localhost:81

Content-length: 5

 

boo

HTTP/1.1 200 OK

Date: Sat, 29 May 2010 16:00:20 GMT

Server: Apache/2.2.13 (Win32) PHP/5.3.0

X-Powered-By: PHP/5.3.0

Content-Length: 89

Content-Type: text/html

 

string(3) "PUT"

string(20) "/handler.php/bla/foo"

string(8) "/bla/foo"

string(5) "boo

"

Connection closed remotely.

您可以使用MultiViews隐藏“php”扩展名,也可以使用mod_rewrite使URL完全符合逻辑。

以上是 如何在Apache2和PHP中启用和使用HTTP PUT和DELETE? 的全部内容, 来源链接: utcz.com/qa/426384.html

回到顶部