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

jin*_*123 5 apache .htaccess webserver web-services web

假设我有以下目录结构:

/
/opt
/opt/lampp
/opt/lampp/htdocs/
/opt/lampp/htdocs/...
/opt/lampp/htdocs/.../project
Run Code Online (Sandbox Code Playgroud)


然后在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/...
Run Code Online (Sandbox Code Playgroud)


我应该写什么来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>
Run Code Online (Sandbox Code Playgroud)


我基本上试图允许访问所有 PHP/CSS 文件,但'/'文件名中带有 a 的文件除外;但是,结果是我无法访问任何内容。完成此任务的正确方法是什么?

另外,是否有跨平台的方法来做到这一点(即它可以在 UNIX/Linux 和 Windows 服务器上工作)?

sta*_*een 4

要拒绝访问 /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]
Run Code Online (Sandbox Code Playgroud)

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

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

RedirectMatch 403 /project/.+/.*$ 
Run Code Online (Sandbox Code Playgroud)