如何启用Apache HTTP Server中的所有HTTP方法

如何在Apache Web服务器上启用RFC 2616中定义的所有HTTP方法的处理? 这些将是:

OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT 

我正在使用Apache HTTP Server版本2.2.22(Ubuntu)
这是我的.htaccess文件:

 <Location /output> Dav On <LimitExcept GET HEAD OPTIONS PUT> Allow from all </LimitExcept> </Location> 

这是从运行Telnet获得的输出 – 没有PUT方法:

 Escape character is '^]'. OPTIONS / HTTP/1.0 HTTP/1.1 200 OK Date: Tue, 09 Oct 2012 06:56:42 GMT Server: Apache/2.2.22 (Ubuntu) Allow: GET,HEAD,POST,OPTIONS Vary: Accept-Encoding Content-Length: 0 Connection: close Content-Type: text/html Connection closed by foreign host. 

对此有何想法?

Apache为静态内容实现所有相关的HTTP方法(由Apache直接提供的实际文件)。 对于dynamic内容(CGI脚本, mod_php等),Apache不关心HTTP方法是什么(除非它被一个<Limit>指令明确限制),并且将请求传递给适当的处理程序。 你的脚本需要处理特定的方法,而不是Apache。 即使非标准的方法传递给dynamic处理程序没有问题。

使用mod_php脚本处理无效的ASDFG / HTTP/1.1请求进行testing。 没有投诉来自Apache,在处理程序脚本的$_SERVER['REQUEST_METHOD']中收到ASDFG

基于http://httpd.apache.org/docs/current/mod/core.html ,这些方法可以在directory.htaccessconfiguration文件中使用Limit method [method] ... > ... </Limit>指令

基本上你必须注释掉下面用来阻止方法的选项。

 <Limit POST PUT DELETE> Require valid-user </Limit> 

可能你使用的是libapache2-mod-php5filter而不是libapache2-mod-php5。

详细信息: apache2和php5:模块或filter

解决这个问题的可靠的方法是了解为什么Apache 在你的特定情况下拒绝这些请求。 您可以从错误日志中了解到这一点。

在我的情况, tail -f /usr/local/apache/logs/error_log给了这个:

 [Sun Sep 18 08:39:52.570672 2016] [:error] [pid 32076:tid 140086307448576] [client 93.125.93.77] ModSecurity: Access denied with code 501 (phase 2). Match of "rx ^((?:(?:POS|GE)T|OPTIONS|HEAD))$" against "REQUEST_METHOD" required. [file "/usr/local/apache/conf/modsec-imh/01_base_rules.conf"] [line "32"] [id "960032"] [msg "Method is not allowed by policy"] [severity "CRITICAL"] [tag "POLICY/METHOD_NOT_ALLOWED"] [hostname "104.244.122.237"] [uri "/products/order/items/45"] [unique_id "V96LGGj0eu0AAH1MR8sAAACB"] 

它提到了一个安全规则和它来自的文件: /usr/local/apache/conf/modsec-imh/01_base_rules.conf 。 编辑该文件解决了我的问题。

PHP文档有一个参考资料部分为这个http://php.net/manual/en/features.file-upload.put-method.php

该指令的apache内核文档位于http://httpd.apache.org/docs/2.2/mod/mod_actions.html