【问题标题】:getting "authentication required" when requesting / instead of /index.php请求 / 而不是 /index.php 时获得“需要身份验证”
【发布时间】:2012-06-19 09:04:00
【问题描述】:

在我的服务器上,我有以下 .htaccess 文件:

DirectoryIndex index.php

AuthType Basic
AuthName "Password Required"
AuthUserFile /var/www/webinterface/.htpasswd
Options +FollowSymLinks
Require valid-user

<Files index.php>
    Satisfy any
    Allow from *
</Files>

如果我请求 URL “IP-ADDRESS/index.php”,一切正常,我会在没有身份验证提示的情况下显示 index.php。但是,只要我请求“IP-ADDRESS/”,浏览器就会要求我提供凭据。

为什么会这样?我错过了什么?

【问题讨论】:

  • 哇,你真的遇到了和我一样的问题和设置,真是巧合

标签: apache .htaccess


【解决方案1】:

尝试替换块以使用 mod_setenvif 来检查请求 URI,而不是使用 &lt;Files&gt;。 mod_auth* 模块优先于 mod_dir,因此从 //index.php 的映射直到认证发生后才会发生。 Mod_setenvif 将在 auth 之前发生。试试:

SetEnvIf Request_URI "^/$" allow=yes
SetEnvIf Request_URI "^/index.php$" allow=yes

AuthType Basic
AuthName "Password Required"
AuthUserFile /var/www/webinterface/.htpasswd
Options +FollowSymLinks
Order Deny,Allow
Satisfy any
Deny from All
Require valid-user
Allow from env=allow

如果请求的 URI 恰好是 //index.php,则设置变量 allow。 Auth 行后面的内容表示,如果设置了变量 allow,则拒绝除有效用户之外的所有内容。

【讨论】:

  • 哇,我印象深刻。那是一个很好的分析器。非常感谢
  • 你不需要把以AuthType开头的块放到等指令中吗?
  • 你能帮我理解如何做相反的事情吗?我想允许访问没有密码保护的目录中的所有文件和子目录,但我确实希望对 / 或 /index.php 进行密码验证。当我用密码保护 index.php 文件时,我仍然可以在没有密码的情况下访问 / 。我认为您上面的答案包含我需要反转上述内容并使其适用于我的情况所需的规则,但我对 SetEnvIf 等的理解不够好,无法将其写出来。
猜你喜欢
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 2015-10-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多