Apache - 拒绝访问除public之外的所有目录

时间:2013-08-13 12:45:43

标签: apache .htaccess

我正在开发一个工具,我现在陷入困境:我想为每个目录定义一组规则,基本上我只想要“公共”文件夹,并拒绝访问其他文件夹。

我的directoy结构是

uapi(root)/
    Application
    Config
    Public/
         Index.php
    Storage
    .htaccess

这里是.htaccess文件

<Directory /Public>
    Order Deny, Allow
    Allow from all
    <IfModule mod_rewrite.c>
        Options +FollowSymLinks
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ Index.php/$1 [L]
    </IfModule>
</Directory>

<Directory /Config>
    Order Deny, Allow
    Deny from all
</Directory>

<Directory /Application>
    Order Deny, Allow
    Deny from all
</Directory>

<Directory /Storage>
    Order Deny, Allow
    Deny from all
</Directory>

3 个答案:

答案 0 :(得分:7)

正如doc page所述,您不能在htaccess中使用<Directory>指令,而只能在服务器配置文件中使用。

无论如何,这不是问题所在:您可以在每个目录中存储一个.htaccess文件,例如。创建这些文件:

公开/ htaccess的

Order Deny, Allow
Allow from all
<IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ Index.php/$1 [L]
</IfModule>

<强> /Config/.htaccess

Order Deny, Allow
Deny from all

<强> /Application/.htaccess

Order Deny, Allow
Deny from all

<强> /Storage/.htaccess

Order Deny, Allow
Deny from all

答案 1 :(得分:2)

您可以使用主DOCUMENT_ROOT/.htaccess文件中的mod_rewrite本身执行所有操作。使用此代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

RewriteRule ^(Application|Storage)(/.*|)$ - [NC,F]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^Public/(.*)$ /Public/Index.php/$1 [L,NC]

此代码会针对/Storage/*/Application/*的所有请求抛出禁止错误,但会/Public/*处理/Public/index.php。< / p>

答案 2 :(得分:0)

对于 Apache httpd服务器2.4 ,您可以通过以下方式进行操作:

在httpd.conf或httpd / conf.d /目录中的.conf文件中。

<Directory "/uapi/">
  Require all denied
</Directory>

<Directory "/uapi/public">
  Require all granted
</Directory>

我测试了此配置。参考是here

如果您无权访问Apache配置文件,那么您也应该可以在.htaccess文件中执行此操作。 就是在/uapi/.htaccess中:

Require all denied

和/uapi/Public/.htaccess中的

Require all granted

如上所述,您不能在.htaccess文件中使用。来自Apache docs

Note that unlike <Directory> and <Location> sections, <Files> sections can be used inside .htaccess files.

更多常规文档: https://httpd.apache.org/docs/2.4/howto/access.html