我有两个 .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 ...
。