如何使用 .htaccess 拒绝访问当前目录的所有子目录?
How to deny access to all subdirectories of current directory with .htaccess?
假设我有以下目录结构:
/
/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 服务器上运行)?
要拒绝访问 /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]
如果您请求一个存在的目录,这 returns 一个 403 错误响应。
如果你想对两者都这样做 files/directories,你可以使用以下重定向
RedirectMatch 403 /project/.+/.*$
假设我有以下目录结构:
/
/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 服务器上运行)?
要拒绝访问 /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]
如果您请求一个存在的目录,这 returns 一个 403 错误响应。
如果你想对两者都这样做 files/directories,你可以使用以下重定向
RedirectMatch 403 /project/.+/.*$