【问题标题】:Blocked HTTP Methods are not returning HTTP 405 response被阻止的 HTTP 方法不返回 HTTP 405 响应
【发布时间】:2020-10-20 10:26:53
【问题描述】:

当请求方法不是 GETPOST ?

我的 Apache .htaccess 尝试会阻止请求,除非它返回不正确的 HTTP 403 响应:

<LimitExcept GET POST>
Order Allow,Deny
Deny from all
</LimitExcept>

在 PHP 中,我在处理请求的绝对开始处使用了以下内容,但它完全被忽略了:

if (!in_array($_SERVER['REQUEST_METHOD'],array('GET','POST')))
{
 header('Access-Control-Allow-Methods: GET, POST');
 header('HTTP/1.1 405');
 die();
}

【问题讨论】:

  • 也许您可以只为非 GET|POST 设置重写规则,该规则将重定向到会引发错误的 PHP 脚本?
  • “在 PHP 中我使用过 [...]” - 你的意思是,结合 .htaccess 阻止请求首先到达该脚本?跨度>
  • @anubhava 后续问题可以在这里找到:stackoverflow.com/questions/62666053/…

标签: php apache .htaccess


【解决方案1】:

您可以使用以下重定向规则来禁用方法并返回 405 错误代码。

RewriteEngine On
RewriteCond %{REQUEST_METHOD} !^(POST|GET)$
RewriteRule .* - [R=405]

【讨论】:

  • 这个工作除了还有另一个RewriteRule,当我#注释掉工作时,当我留下一个常规PUT请求变成一个HTTP 302 响应。我尝试使用L, (RewriteRule .* - [L,R=405]) 修改该行,尽管它不会阻止PUT 请求处理.htaccess 文件的其余部分?
  • 使用单独的重写条件和规则并测试。在 VirtualHost 中添加建议的规则并进行测试。
  • 它自己工作,但另一条规则否定它,所以我会问一个单独的问题来解决这个问题。 [END][L] 组合绝对不执行任何操作,无论它们的顺序或规则的顺序如何。当我删除第二条不相关的规则时,它确实有效,因此我接受了这个答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 2014-08-09
  • 2013-09-12
  • 2017-05-21
  • 2015-11-26
相关资源
最近更新 更多