MAMP .htaccess LimitExcept 不会阻止 GET 请求

MAMP .htaccess LimitExcept doesn't block GET request

我正在学习 .htaccess 中的 Apache 指令并测试安全设置。我发现了 LimitExcept 指令。

我在本地主机中有一个 wordpress 目录,在里面有一个 .htaccess,因此这些指令会影响所有子目录,例如我的项目文件。

这是我在 .htaccess 中的代码:

Options All -Indexes
FileEtag None

<files wp-config.php>
order allow,deny
deny from all
</files>

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* - [F]
</IfModule>

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

#<IfModule mod_rewrite.c>
#RewriteEngine on
#RewriteCond %{REQUEST_METHOD} ^GET
#RewriteRule .* - [R=400]
#</IfModule>

让我烦恼的是,我使用的 LimitExcept 指令并没有阻止我访问我的主页。好像允许GET请求。

我必须添加或使用重写指令来阻止我的 GET 请求。

我还发现,如果我将 HEAD 方法从当前的 LimitExcept 指令中排除,那么请求我的主页将正确地 return 禁止请求响应。

我知道可以在服务器配置中应用其他设置,但我不想在该级别进行更改,因为我可能无法从我的共享托管服务服务器访问此配置。

我是不是漏掉了什么或者 LimitExcept 指令有问题?

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

看来HEAD和GET是有内在联系的。阻止一个,你就阻止另一个。来自 the docs for <limit>(也包括 <LimitExcept>):

If GET is used, it will also restrict HEAD requests.

在我的测试中,反之亦然...如果你限制 HEAD 那么 GET 也被限制。

因此,回到您的 <LimitExcept POST HEAD> 指令...通过为 HEAD 创建异常,您似乎也在为 GET 创建异常。您需要从指令中删除 HEAD 。 (假设您使用的是 Apache 2.4,您还应该使用 Require 指令,而不是旧的 Order / Deny 指令。)例如:

<LimitExcept POST>
Require all denied
</LimitExcept>