.htaccess 命令拒绝,允许规则在 Windows 上不起作用

.htaccess 命令拒绝,允许规则在 Windows 上不起作用

我有两个 .htaccess 设置,

一个位于 htdocs 主文件夹中,附带 .htpasswd 文件

现在看起来就是这样

ErrorDocument 404 /index.html
AuthName "Protected Area" 
AuthType Basic 
AuthUserFile C:\xampp\htpwdfolder\.htpasswd 
require valid-user



DirectoryIndex index.html

子文件夹中的第二个如下所示:

order deny,allow
allow on all




Options All -Indexes

当我指向直接文件路径时,出现内部服务器错误

我也尝试过这样的方法:

<RequireAny>
Require ip IP1
Require ip IP2
Require ip IP3
</Require Any>

代替

order deny,allow
deny from all
allow from IP1
allow from IP2
allow from IP3

但这并没有改变什么

有人有想法吗?

一旦我使用订单拒绝,允许规则,我就会在该特定路径中收到内部服务器错误

答案1

当您收到内部服务器错误(500 响应)时,您需要检查服务器的错误日志以了解该错误的详细信息。对于.htaccess,500 错误通常是由语法错误和内部重写循环(使用 mod_rewrite 时)引起的。

order deny,allow
allow on all

这是语法错误。应该是Allow from all,而不是on。但如果没有附加指令,这些不会覆盖父目录中声明的 HTTP 身份验证Satisfy Any

Order deny,allow
Allow from all
Satisfy Any

但是,这些是(已弃用的)Apache 2.2 指令。您应该在 Apache 2.4 上使用以下命令,默认情况下它将覆盖父配置:

Require all granted
<RequireAny>
Require ip IP1
Require ip IP2
Require ip IP3
</Require Any>

您在结束指令标记中还有另一个语法错误。即。它应该是</RequireAny>- 没有空格。我假设IP1等是有效的 IP 地址,否则这也会导致 500 错误。

请注意,<RequireAny>这里并不严格要求包装器,因为这是默认的。

这将覆盖子目录的父 HTTP 身份验证。但是,它完全覆盖父配置。如果请求的 IP 地址不是上述地址之一,那么您将收到 403 Forbidden 响应,并且不会提示您输入密码。

如果你想回退到要求输入密码,那么你需要添加一个额外的指令来合并与父配置一起的指令。即AuthMerging Or。。

例如:

AuthMerging Or
Require ip 203.0.113.111
#Require ip IP2
#Require ip IP3

现在,如果请求来自不同的 IP 地址,那么他们将被提示输入密码(401 未授权),而不是被 403 禁止完全阻止。

order deny,allow
deny from all
allow from IP1
allow from IP2
allow from IP3

如上所述,您需要一个附加Satisfy Any指令来覆盖父配置中定义的 HTTP 身份验证。但是,如前所述,这些是(已弃用的)Apache 2.2 指令。您应该改用 Apache 2.4 指令Require ip ...

相关内容