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

e5nqia27  于 2022-11-25  发布在  其他
关注(0)|答案(6)|浏览(157)

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

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

这是工作正常。但是,我现在有一个目录内的这个文件夹,我想让任何人访问,但不知道如何做到这一点。
我知道可以将文件移出受保护的目录,但长话短说,文件夹需要留在受保护的文件夹内,但所有人都可以访问。
如何限制对文件夹的访问,但允许对子文件夹的访问?

aoyhnmkz

aoyhnmkz1#

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

x0fgdtte

x0fgdtte2#

根据this article,您可以使用SetEnvIf来完成此操作。您可以匹配每个要授予访问权限的文件夹和文件,并为它们定义一个环境变量“allow”。然后添加一个条件,如果存在此环境变量,则允许访问。
您需要将以下指令添加到. 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
des4xlb0

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>
ndasle7k

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
圆括号和问号组成可选组,“.*”表示零个或多个字符。
就我个人而言,我会在子文件夹的.htaccess中使用require all granted 1,或者:
require expr "%{REQUEST_URI} =~ m|^/path/to/directory(/.*)?$|"2在父项的中。

68bkxrlz

68bkxrlz5#

对于Apache 2.4,请创建包含以下内容的.htaccess文件:

Require all granted

将其放置在要允许访问的子目录中。

6gpjuf90

6gpjuf906#

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

相关问题