Exclude one folder in htaccess protected directory
我有一个受htaccess保护的目录。这是我现在使用的代码:
1 2 3 4 | AuthName"Test Area" Require valid-user AuthUserFile"/***/.htpasswd" AuthType basic |
这很好。但是,我现在在此文件夹中有一个目录,我希望任何人都可以访问该目录,但不确定如何操作。
我知道可以将文件移动到受保护的目录之外,但总而言之,该文件夹需要保留在受保护的文件夹中,但所有人都可以访问。
如何限制对文件夹的访问,但允许访问子文件夹?
只需在子目录中创建一个.htaccess文件,其内容为:
根据本文,您可以使用
您需要在.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> |
我没有足够的声誉来添加评论,但是其中两个答案使用以下模式:
设置环境变量,然后检查它是否存在。引号中的部分是一个正则表达式。该语句表示,以" path / to / directory /"结尾的任何路径都匹配并且应设置变量,例如" administrationpath / to / directory /",而不是" path / to / directory / index.html"。" $"匹配字符串的结尾。
一个更好的匹配是:
这意味着URI路径必须以" / path / to / directory /"开头(插入符号与字符串的开头匹配),但是在尾部斜杠后可以包含其他内容。请注意,这需要在末尾加斜杠。要使其可选,您可以添加两个规则:
1 2 | SetEnvIf Request_URI"^/path/to/directory$" allow SetEnvIf Request_URI"^/path/to/directory/" allow |
或者,具有更多模式匹配:
括号和问号组成一个可选组,"。*"表示零个或多个字符。
我个人将在子文件夹的.htaccess中使用
父母的
无需在子目录中创建.htaccess。
只需使用SetEnvIf指令创建所需数量的变量,并确保要传递/拒绝的文件或路径名是传递给SetEnvIf的URI正则表达式的一部分,就像@ Sumurai8所说的一样,但是设置正则表达式满足您的需求,因为URI应该开始/结束/包含一组字符............