我有一个受htaccess保护的目录。下面是我现在使用的代码:
AuthName "Test Area" Require valid-user AuthUserFile "/***/.htpasswd" AuthType basic
这是工作正常。但是,我现在有一个目录内的这个文件夹,我想让任何人访问,但不知道如何做到这一点。我知道可以将文件移出受保护的目录,但长话短说,文件夹需要留在受保护的文件夹内,但所有人都可以访问。如何限制对文件夹的访问,但允许对子文件夹的访问?
aoyhnmkz1#
只需在子目录中创建一个.htaccess文件,其内容如下:Satisfy any
Satisfy any
x0fgdtte2#
根据this article,您可以使用SetEnvIf来完成此操作。您可以匹配每个要授予访问权限的文件夹和文件,并为它们定义一个环境变量“allow”。然后添加一个条件,如果存在此环境变量,则允许访问。您需要将以下指令添加到. htaccess中。
SetEnvIf
SetEnvIf Request_URI "(path/to/directory/)$" allow SetEnvIf Request_URI "(path/to/file\.php)$" allow Order allow,deny Allow from env=allow Satisfy any
des4xlb03#
可接受的答案似乎不能很好地运行新的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>
ndasle7k4#
我没有足够的声誉来添加评论,但其中两个答案使用了以下模式: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 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在父项的中。
SetEnvIf Request_URI "^/path/to/directory(/.*)?$" allow
require all granted
require expr "%{REQUEST_URI} =~ m|^/path/to/directory(/.*)?$|"
68bkxrlz5#
对于Apache 2.4,请创建包含以下内容的.htaccess文件:
.htaccess
Require all granted
将其放置在要允许访问的子目录中。
6gpjuf906#
不需要在子目录中创建**.htaccess**。只需使用SetEnvIf指令创建所需数量的变量,并确保要允许/拒绝的文件或路径名是传递给SetEnvIf的URI正则表达式的一部分,就像@Sumurai8所说的那样,但要设置正则表达式以满足您的需要,因为URI应该开始/结束/包含一组字符.........
6条答案
按热度按时间aoyhnmkz1#
只需在子目录中创建一个.htaccess文件,其内容如下:
Satisfy any
x0fgdtte2#
根据this article,您可以使用
SetEnvIf
来完成此操作。您可以匹配每个要授予访问权限的文件夹和文件,并为它们定义一个环境变量“allow”。然后添加一个条件,如果存在此环境变量,则允许访问。您需要将以下指令添加到. htaccess中。
des4xlb03#
可接受的答案似乎不能很好地运行新的Apache版本,因为它停止工作,只要Apache更新推出了我的一些客户的服务器。
我建议采用以下方法:
ndasle7k4#
我没有足够的声誉来添加评论,但其中两个答案使用了以下模式:
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
圆括号和问号组成可选组,“.*”表示零个或多个字符。
就我个人而言,我会在子文件夹的.htaccess中使用
require all granted
1,或者:require expr "%{REQUEST_URI} =~ m|^/path/to/directory(/.*)?$|"
2在父项的中。68bkxrlz5#
对于Apache 2.4,请创建包含以下内容的
.htaccess
文件:将其放置在要允许访问的子目录中。
6gpjuf906#
不需要在子目录中创建**.htaccess**。
只需使用SetEnvIf指令创建所需数量的变量,并确保要允许/拒绝的文件或路径名是传递给SetEnvIf的URI正则表达式的一部分,就像@Sumurai8所说的那样,但要设置正则表达式以满足您的需要,因为URI应该开始/结束/包含一组字符.........