关于apache:排除htaccess受保护目录中的一个文件夹

Exclude one folder in htaccess protected directory

我有一个受htaccess保护的目录。这是我现在使用的代码:

1
2
3
4
AuthName"Test Area"
Require valid-user
AuthUserFile"/***/.htpasswd"
AuthType basic

这很好。但是,我现在在此文件夹中有一个目录,我希望任何人都可以访问该目录,但不确定如何操作。

我知道可以将文件移动到受保护的目录之外,但总而言之,该文件夹需要保留在受保护的文件夹中,但所有人都可以访问。

如何限制对文件夹的访问,但允许访问子文件夹?


只需在子目录中创建一个.htaccess文件,其内容为:

Satisfy any


根据本文,您可以使用SetEnvIf完成此操作。您匹配要大访问的每个文件夹和文件,并为其定义环境变量"允许"。然后添加一个条件,如果存在此环境变量,则允许访问。

您需要在.htaccess中添加以下指令。

1
2
3
4
5
SetEnvIf Request_URI"(path/to/directory/)$" allow
SetEnvIf Request_URI"(path/to/file\\.php)$"  allow
Order allow,deny
Allow from env=allow
Satisfy any


可接受的答案似乎不适用于新的Apache版本,因为它在我的某些客户服务器上推出Apache更新后即停止工作。

我建议采用以下方法:

1
2
3
4
5
6
7
8
9
10
AuthType Basic
AuthName"NO PUBLIC ACCESS"
AuthUserFile /xxx/.htpasswd

SetEnvIf REQUEST_URI"(path/to/directory/)$" ALLOW

<RequireAny>
  Require env ALLOW
  Require valid-user
</RequireAny>


我没有足够的声誉来添加评论,但是其中两个答案使用以下模式:

SetEnvIf Request_URI"(path/to/directory/)$" allow

设置环境变量,然后检查它是否存在。引号中的部分是一个正则表达式。该语句表示,以" path / to / directory /"结尾的任何路径都匹配并且应设置变量,例如" administrationpath / to / directory /",而不是" path / to / directory / index.html"。" $"匹配字符串的结尾。

一个更好的匹配是:

SetEnvIf Request_URI"^/path/to/directory/" allow

这意味着URI路径必须以" / path / to / directory /"开头(插入符号与字符串的开头匹配),但是在尾部斜杠后可以包含其他内容。请注意,这需要在末尾加斜杠。要使其可选,您可以添加两个规则:

1
2
SetEnvIf Request_URI"^/path/to/directory$" allow
SetEnvIf Request_URI"^/path/to/directory/" allow

或者,具有更多模式匹配:

SetEnvIf Request_URI"^/path/to/directory(/.*)?$" allow

括号和问号组成一个可选组,"。*"表示零个或多个字符。

我个人将在子文件夹的.htaccess中使用require all granted 1或:

父母的

require expr"%{REQUEST_URI} =~ m|^/path/to/directory(/.*)?$|"2。


无需在子目录中创建.htaccess。

只需使用SetEnvIf指令创建所需数量的变量,并确保要传递/拒绝的文件或路径名是传递给SetEnvIf的URI正则表达式的一部分,就像@ Sumurai8所说的一样,但是设置正则表达式满足您的需求,因为URI应该开始/结束/包含一组字符............