2012-01-02 117 views
11

我有一个受htaccess保护的目录。这里是我现在使用的代码:在htaccess保护的目录中排除一个文件夹

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

这工作正常。但是,我现在在该文件夹内有一个目录,我想允许任何人访问,但不知道如何操作。

我知道可以将文件移动到受保护的目录之外,但是要简短地说明文件夹需要保留在受保护的文件夹内,但所有人都可以访问。

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

回答

11

根据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 
+0

感谢您的帮助! – 2012-01-02 06:23:17

+0

@SherwinFlight我遵循上面的代码,但仍然问密码,如何排除目录上传图片 – Nullpointer 2016-02-17 07:08:00

+0

谢谢你,仍然工作。 – 2017-05-05 14:51:19

24

与内容子目录只需创建一个.htaccess文件:

Satisfy any

+3

这可以工作,但如果没有目录,因为mod_rewrite的东西。 – janw 2015-02-05 13:57:25

+0

把它放在区块 – Greg 2016-08-11 18:57:42

0

没有必要在子目录创建的.htaccess

,因为你需要与SetEnvIf之后指令只需要创建尽可能多的变量,并且一定要ALLW /拒绝的文件名或路径名是传递给SetEnvIf之后的URI正则表达式的一部分,酷似@ Sumurai8说,但设置正则表达式以满足您的需求,因为URI应该开始/结束/包含一组字符............

0

接受的答案似乎并没有很好地运行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>