如何使用.htaccess拒绝访问当前目录的所有子目录?

时间:2017-04-11 03:34:45

标签: apache .htaccess web-services web webserver

假设我有以下目录结构:

/
/opt
/opt/lampp
/opt/lampp/htdocs/
/opt/lampp/htdocs/...
/opt/lampp/htdocs/.../project


然后在project/目录中,我有以下目录结构:

project/
project/.htaccess
project/index.php
project/dashboard.php
project/theme.css
project/...
project/subdir-1
project/subdir-1/...
project/subdir-2
project/subdir-2/...
project/subdir-3
project/subdir-3/...


我在project/.htaccess写什么来允许访问project/目录中的所有文件,但拒绝访问所有子目录(即subdir-*)和每个子目录中的所有文件?目录

这是我到目前为止所做的:


htaccess的

# Deny access by default
Order deny,allow
Deny from all

# Allow access to all PHP/CSS files in current directory
<Files ~ "[^/]\{0,}\.(php|css)$">
    Allow from all
</Files>


我基本上试图允许访问所有PHP / CSS文件,但文件名中包含'/'的文件除外;但结果是我无法访问任何内容。实现这一目标的正确方法是什么?

此外,是否有一种跨平台的方法(即,它可以在UNIX / Linux和Windows服务器上运行)?

1 个答案:

答案 0 :(得分:3)

要拒绝访问/ project文件夹的所有子目录,可以在 project / .htaccess 中使用以下mod-rewrite规则:

RewriteEngine on

#if the request is for existent dirs, forbid the request
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [R=403,L]

如果您请求存在目录,则返回403错误响应。

如果要对两个文件/目录执行此操作,可以使用以下重定向

RedirectMatch 403 /project/.+/.*$