在Apache中禁用HTTP方法


11

如何禁用某些HTTP方法(例如PUT或TRACE),并让Apache发送HTTP“ 405方法不允许”。

我尝试了LimitLimitExcept指令,但它们似乎发送“ 403 Forbidden”。

我有几个虚拟主机-应该在所有这些虚拟主机中,都位于主httpd.conf中。

Answers:


14

看起来错误代码的定义似乎确实有些困难。

但是,一种解决方法可能是使用mod_rewrite。因为至少有99%的看起来不可能的Apache问题mod_rewrite可以提供其伏都教舞蹈并解决您的问题,所以让我大吃一惊。

如果其他所有方法均失败,请尝试类似

RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^GET [AND]
RewriteCond %{REQUEST_METHOD} !^POST 
RewriteRule .* /yourerrordocuments/405.html [R=405,L] 

我知道这可能不是最好的解决方案,但是应该可以解决...


1
+1 Mod_rewrite伏都教解决了所有问题(针对有限的所有问题)。
克里斯·S

6
Mod_rewrite还会在每个URL进程上运行慢速的正则表达式,这会降低服务器的速度。请谨慎使用。
Marcin 2010年

谢谢-很好的技巧,将响应代码设置为R = 405。希望会有更好的方法,以便OPTIONS报告正确的值,但我想这是不可能的
Greg

哪个版本的Apache / mod_rewrite支持[AND]标志?我只看到[OR](和“和”是隐含的):httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
asjo

4

对于跟踪方法,您可以添加此

TraceEnable off

在您的主要配置文件中


2

要启用重写引擎,请添加以下内容:

 RewriteEngine On 

请注意,默认情况下,重写配置不会在虚拟服务器之间继承。将RewriteEngine On添加到每个虚拟主机。

RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
RewriteRule .* - [F]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.