如何从子目录中移除.htaccess密码保护

101

我使用.htaccess对整个网站进行了密码保护,但是我想暴露其中一个子目录,以便无需密码即可查看。

如何为子目录禁用.htaccess密码保护?具体的.htaccess语法是什么?

这是我的.htaccess文件,放在ftp的根目录中:

AuthName "Site Administratrion"
AuthUserFile /dir/.htpasswd
AuthGroupFile /dev/null
AuthName secure AuthType Basic require user username1 order allow,deny allow from all
要为子目录禁用.htaccess密码保护,可以在该子目录中创建另一个.htaccess文件,并将以下内容添加到其中:
Satisfy Any
这将允许所有的用户访问该子目录,而不需要输入用户名和密码。注意,这也意味着该子目录对于任何人来说都是公开的,因此请确保仅将其用于公开可用的内容。

4
这可能更适合在Serverfault上进行讨论。 - beggs
6个回答

165

您需要在所需的目录中创建一个新的.htaccess文件,并在其中包含以下内容的Satisfy any指令,适用于Apache 2.3及以下版本:

# allows any user to see this directory
Satisfy Any

Apache 2.4的语法已经发生了变化,以下语法具有相同的效果:

Require all granted

7
我只能使用 Allow from all 而不能使用 Satisfy Any 使其起作用。 - Jess Telford
2
@JessTelford,“Satisfy Any”已经生效,但是它被错误地拼写为“Satisify Any”。也许这就是它对你不起作用的原因。 - Muneer
1
我需要将单个文件取消保护(其他所有文件都受保护),在<Files>部分进行相同设置。 - Nick
@RageZ 谢谢!事实证明,我的问题只是服务器管理员禁用了htaccess覆盖,但这仍然很有用。 - dev_willis
@dave,感谢您添加2.4语法。这正是我在将此网站迁移到新家时所需要的。 - Josiah
显示剩余5条评论

37

在 RageZ 的答案基础上进行补充,我在服务器指令中使用了这个:

<Directory /var/www/protected/>
     AuthType Basic
     AuthName "Production"
     AuthUserFile /path/to/.htpasswd
     Require valid-user
</Directory>

<Directory /var/www/protected/unprotected>
     Satisfy Any
</Directory>

太棒了。谢谢RageZ!


9

当我将 "Allow from all" 和 "Satisfy Any" 更改为 "Require all granted" 时,它就正常工作了。这两个选项对我没有用。我的 Apache 版本是 2.4。 - endo64

3

以下是一种允许子目录“foo”通过站点上的主要.htaccess文件进行基本身份验证的方法:

AuthType Basic
AuthName "Password Required"
AuthUserFile /dir/.htpasswd
Require expr %{REQUEST_URI} =~ m#^/foo/#
Require valid-user

注意:此方法适用于Apache 2.4版本,我未确认是否适用于早期版本。

1

您需要在子目录中添加另一个 .htaccess 文件,以覆盖身份验证。.htaccess 会向上级级联,即它将在当前文件夹中查找,然后向上一级依次查找。


4
你知道语法吗?我理解这个概念,但不知道如何实现它。 - justinl
如果您想删除当前文件并不使用任何权限,请将其替换为名为 .htaccess 的空文件。 - Gaʀʀʏ
3
@Garry,这不是 .htaccess 级联的工作方式,你必须明确覆盖选项。 - William Denniss

0
如果您想要防止htaccess身份验证中的任何特定目录,则可以在htaccess文件顶部使用以下代码:
AuthType Basic AuthName "输入密码" AuthUserFile /home/public_html/.htpasswd /*到您的.htpasswd文件的路径*/ Require valid-user SetEnvIf Request_URI "(/DIRECTORY_NAME/)$" allow Order allow,deny Allow from env=allow
此外,如果您想要防止多个目录,则可以添加
SetEnvIf Request_URI "(/DIRECTORY_NAME/)$" allow
尽可能多次,以便从htaccess预防中删除尽可能多的目录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接