限制 Apache2.4 请求标头

限制 Apache2.4 请求标头

我试图将虚拟主机的请求标头限制为仅POSTHEADGET。到目前为止,我所做的是.htaccess为我的虚拟主机创建 并输入以下内容:

<LimitExcept GET HEAD POST>
    Require valid-user
</LimitExcept>

问题是<LimitExcept>显示错误not allowed here,所以我尝试使用<Limit>,但结果还是同样的错误。我还尝试将它们移动到我的虚拟主机.conf文件中,但仍然出现错误。我不明白的是,在官方文档中它说它允许在那里,但在我的服务器中却不允许。

答案1

如果您尝试仅允许 GET、POST 和 HEAD 方法,那么这应该可以正常工作:

<Directory "/path/to/documentroot">
    Require method GET POST HEAD
</Directory>

您需要将此配置放入您的 VirtualHost 中。

编辑: 回答评论中您的另一个问题(如何仅为 POST 请求启用密码验证),可以通过以下指令来实现(您可以将其放入 /path/to/your/directory/.htaccess 中):

<RequireAny>
     AuthUserFile /path/to/your/.htpasswd
     AuthName "Login"
     AuthType Basic
     Require method GET HEAD
     Require valid-user
</RequireAny>

这将允许 GET 和 HEAD 方法,但 POST 请求会触发身份验证。

答案2

2.4 有一个专门用于此目的的模块,称为 mod_allowmethods,2.4 中不鼓励使用 Limit/LimitExcept。请确保加载模块并在适当的虚拟主机中添加以下内容:

# documentroot dir in virtualhost
<Directory /path/to/dir>
     AllowMethods GET HEAD POST
     Require valid-user
</Directory>

您还可以在服务器配置中尽早将其定义为全局的,就像我在下面描述的那样。

***请注意,这是文件系统中的 /,因此您应该在此处拒绝访问,然后允许进入特定目录(如 documentroot 或别名目录),但允许方法会进一步向下传播,除非您稍后覆盖它。

<Directory />
    Require all denied
    AllowMethods GET HEAD POST
</Directory>

相关内容