4

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

我的目录结构是

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>
4

3 回答 3

7

正如这个文档页面所说,您不能<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>

/Config/.htaccess

Order Deny, Allow
Deny from all

/应用程序/.htaccess

Order Deny, Allow
Deny from all

/存储/.htaccess

Order Deny, Allow
Deny from all
于 2013-08-13T12:58:33.497 回答
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]

此代码将为所有对or的请求抛出Forbidden错误,但将由./Storage/*/Application/*/Public/*/Public/index.php

于 2013-08-13T13:24:28.477 回答
0

对于Apache httpd 服务器 2.4,您可以这样做:

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

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

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

我测试了这个配置。参考在这里

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

Require all denied

并在 /uapi/Public/.htaccess

Require all granted

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

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

于 2020-07-24T22:06:49.657 回答