Apache - 如何拒绝目录但允许该目录中的一个文件

时间:2011-06-05 15:01:00

标签: security apache webserver

我尝试配置我的Apache .conf文件以拒绝某个类别的列表,但我想允许此类别中的特定文件。 似乎目录规则比“文件”规则“更强”,因此当使用两者时 - 我无法访问该特定文件。

这是我尝试的:

<Directory /var/www/denied_directory>
     order deny,allow
     Deny From All
</Directory>

<Files safefile.php>
    Order Allow,Deny
    Allow from All
</Files>

6 个答案:

答案 0 :(得分:20)

如果配置正确,它可以正常工作:

   <Directory /var/www/denied_directory>
        Order allow,deny
        <Files test.php>
           Order deny,allow
        </Files>
   </Directory>

答案 1 :(得分:9)

在Apache 2.4中,对环境变量进行额外测试以获得良好的衡量标准:

另请参阅:Require Directive

<Directory "/wikis/foswiki">

    Require all denied

    # Allow access to toplevel files ending in .html (in particular index.html) only 
    # (comment out if you don't care for this)

    <Files ~ "\.html$">

       <RequireAll>
          Require all granted
          Require not env blockAccess
       </RequireAll>

    </Files>

</Directory>

答案 2 :(得分:3)

将您的files指令放在目录指令中。

答案 3 :(得分:0)

To allow a specific file when access is restricted by HTTP password. Be careful, password protection is defined on filesystem basis and specific allowed files are defined by URI. Updated for Apache 2.4.

<Directory /path/to/directory/>
    AuthName SecureArea
    AuthType Basic
    AuthUserFile /path/to/passwd-file
    Require user my-user

    SetEnvIf Request_URI "path/to/uri-allowed-1.php" allowedURL
    SetEnvIf Request_URI "path/to/uri-allowed-2.php" allowedURL
    Require env allowedURL
</Directory>

答案 4 :(得分:0)

@acond的答案中缺少一行。我认为它需要Allow

<Directory /var/www/denied_directory>
     order deny,allow
     Deny from All
    <Files safefile.php>
        order deny,allow
        Allow from All
    </Files>

由于每个指令中只有一条规则,我怀疑order行可能无关紧要。尽管也许最外面的一个是必需的,但是因为嵌套了多个规则。 (我是apache配置的新手)

答案 5 :(得分:0)

在目录(文件夹)中创建一个.htaccess文件,并使用以下代码块:

order deny,allow
deny from all

<Files safefile.php>
   allow from all
</Files>

这将允许../safefile.php文件,但允许../
如果您想允许../(例如,您需要拥有../index.php),则应该执行以下操作:

order deny,allow
deny from all

<FilesMatch ^(index\.php)?$>
    allow from all
</FilesMatch>