我正在开发一个工具,我现在陷入困境:我想为每个目录定义一组规则,基本上我只想要“公共”文件夹,并拒绝访问其他文件夹。
我的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>
答案 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.