我正在尝试限制在我的网站上使用某些 HTTP 动词。我在 VirtualHost 配置文件的 Directory 元素中输入了以下内容:
<Limit GET POST HEAD>
Allow from all
</Limit>
<Limit PUT DELETE OPTIONS>
Deny from all
</Limit>
这似乎有效,但却产生了意想不到的结果:
我在进行此更改之前和之后运行了以下 telnet/HTTP 命令,
open server 80
OPTIONS server/abs_path HTTP/1.1
User-Agent: Telnet/1.0
Host: server
在更改之前,我收到了带有 Allowed 标头的成功响应。
然而,更改之后,我期望收到 405“方法不允许”响应,但却收到了 403“禁止访问”响应。
我需要在 apache 中做哪些更改才能返回 405 HTTP 响应?
非常感谢
答案1
经过三个小时的查看 apache 文档和测试后,我发现我可以使用 mod_rewrite 正确响应不需要的 HTTP 方法:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} !=GET
RewriteCond %{REQUEST_METHOD} !=POST
RewriteRule .* /error/405.html [R=405,L]