排除htaccess受保护目录中的一个文件夹

时间:2012-01-02 05:31:04

标签: apache .htaccess authentication

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

AuthName "Test Area"
Require valid-user
AuthUserFile "/***/.htpasswd"
AuthType basic

这很好用。但是,我现在在此文件夹中有一个目录,我想允许任何人访问,但我不知道该怎么做。

我知道可以将文件移到受保护目录之外,但为了简单说明文件夹需要保留在受保护文件夹中,但所有人都可以访问。

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

5 个答案:

答案 0 :(得分:33)

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

Satisfy any

答案 1 :(得分:14)

根据this article,您可以使用SetEnvIf来完成此操作。您匹配要访问的每个文件夹和文件,并为它们定义环境变量“允许”。然后添加一个允许访问的条件,如果存在此环境变量。

您需要将以下指令添加到.htaccess。

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

答案 2 :(得分:5)

对于新的Apache版本,接受的答案似乎并不顺利,因为一旦我的某些客户服务器上推出了Apache更新,它就会停止工作。

我建议采用以下方法:

AuthType Basic
AuthName "NO PUBLIC ACCESS"
AuthUserFile /xxx/.htpasswd

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

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

答案 3 :(得分:1)

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

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 /”开头(插入符号与字符串的开头匹配),但是在尾部斜杠后可以包含其他内容。请注意,这需要尾部斜杠。要使其可选,您可以添加两个规则:

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在父母的地方。

答案 4 :(得分:-1)

无需在子目录中创建 .htaccess

只需使用 SetEnvIf 指令创建任意数量的变量,并确保您想要allw / deny的文件或路径名是您传递给 SetEnvIf <的URI正则表达式的一部分/ strong>,与@ Sumurai8完全相同,但设置正则表达式以满足您的需求,因为URI应该开始/结束/包含一组字符............