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

4 apache .htaccess

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

我的directoy结构是

uapi(root)/
    Application
    Config
    Public/
         Index.php
    Storage
    .htaccess
Run Code Online (Sandbox Code Playgroud)

这是.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>
Run Code Online (Sandbox Code Playgroud)

Pao*_*fan 7

正如此doc页面所述,您不能<Directory>在htaccess中使用该指令,而只能在服务器conf文件中使用.

无论如何,这不是一个问题:你可以.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>
Run Code Online (Sandbox Code Playgroud)

/Config/.htaccess

Order Deny, Allow
Deny from all
Run Code Online (Sandbox Code Playgroud)

/Application/.htaccess

Order Deny, Allow
Deny from all
Run Code Online (Sandbox Code Playgroud)

/Storage/.htaccess

Order Deny, Allow
Deny from all
Run Code Online (Sandbox Code Playgroud)