Apache2:如何限制对目录的访问,但允许访问其中的一个文件?

Apache2:如何限制对目录的访问,但允许访问其中的一个文件?

我继承了一个设计不佳的网络应用程序,其中有一个需要公开访问的文件,但该文件位于不应该公开访问的目录中。

换句话说,我需要一种方法来阻止目录内的所有文件和子目录,但对单个文件覆盖它。

我正在尝试这个:

# No one needs to access this directly
<Directory /var/www/DangerousDirectory/>
   Order Deny,allow
   Deny from all

   # But this file is OK:
   <Files /var/www/DangerousDirectory/SafeFile.html>
      Allow from all
   </Files>
</Directory>

但它不起作用——它只是阻止了所有内容,包括我想要允许的文件。有什么建议吗?

答案1

StackOverflow 上有一个答案可以回答这个问题,我认为Order嵌套Files指令中缺少了一个?

https://stackoverflow.com/questions/6243677/apache-how-to-deny-directory-but-allow-one-file-in-that-dirctory

答案2

# No one needs to access this directly
<Directory /var/www/DangerousDirectory/>
   Order Deny,allow
   Deny from all
</Directory>
# But this file is OK:
<Files /var/www/DangerousDirectory/SafeFile.html>
   Order Deny,Allow
   Allow from all
</Files>

如果该目录受密码保护,Satisfy any也请添加。

答案3

虽然答案很晚,但或许仍是一个答案。

标签在目录范围内,不应具有完整路径。因此它应为:

<Directory "/var/www/DangerousDirectory">
   Order Deny,allow
   Deny from all

   # But this file is OK:
   <Files "SafeFile.html">
      Allow from all
   </Files>
</Directory>

请注意,这将允许该目录树中任何名为 SafeFile.html 的文件。

答案4

当访问受 HTTP 密码限制时允许特定文件。请注意,密码保护是根据文件系统定义的,而特定允许的文件由 URI 定义。已针对 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>

相关内容