Apache配置疑问:<Directory>内RequireAll无效,移除<Location>后访问被拒
以下是可能导致<Directory>内Require规则失效的几个关键点:
全局或其他配置的访问控制冲突
检查Apache主配置、同目录下被包含的其他配置文件,看是否存在全局的Require all denied或者其他匹配/subfolder路径的<Location>/<Directory>规则。Apache会合并所有匹配的访问控制指令,若有更高优先级的拒绝规则,会直接覆盖<Directory>里的认证要求。目标目录的.htaccess文件干扰
因为<Directory>里设置了AllowOverride All,如果/mainfolder/subfolder目录下存在.htaccess文件,里面的访问控制规则会优先生效。比如文件里写了Require all denied,就会直接拒绝访问,不会触发Basic认证。SSLRequireSSL的限制
<Directory>里配置了SSLRequireSSL,如果访问时用的是HTTP而非HTTPS,Apache会直接拒绝请求,不会弹出账号密码输入框。注释<Location>前,<Location>块里没有这个限制,所以HTTP访问也能触发认证;注释后这个规则生效,HTTP访问就会直接被拒。新旧访问控制语法混用
如果配置里同时使用了Apache 2.2及之前的旧语法(比如Order Deny,Allow、Deny from all)和2.4+的新Require语法,可能导致规则冲突,使得认证逻辑无法正常触发。检查全局配置是否有这类旧指令。配置加载顺序问题
确认Alias指令和<Directory>指令的加载顺序,虽然你说<Directory>其余指令正常,但如果<Directory>配置在Alias之前,可能导致Require规则的匹配逻辑异常。可以尝试把<Directory>块移到Alias指令之后加载。
内容的提问来源于stack exchange,提问作者Győző Dobner

