我试图将虚拟主机的请求标头限制为仅POST
、HEAD
和GET
。到目前为止,我所做的是.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>