【问题标题】:How to deny access to all subdirectories of current directory with .htaccess?如何使用.htaccess 拒绝访问当前目录的所有子目录?
【发布时间】:2017-04-11 13:25:02
【问题描述】:

假设我有以下目录结构:

/
/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 服务器上运行)?

【问题讨论】:

    标签: apache .htaccess web-services web webserver


    【解决方案1】:

    要拒绝访问 /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/.+/.*$ 
    

    【讨论】:

    • 看来您的解决方案大部分都在工作(我不再可以访问子目录中的 PHP 文件),但我仍然能够下载子目录中的 .txt 文件(例如 @ 987654323@).
    猜你喜欢
    • 2012-08-02
    • 1970-01-01
    • 2017-03-17
    • 2015-07-30
    • 2016-10-18
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多