【问题标题】:How can I deny all but one directory name with .htaccess?如何使用 .htaccess 拒绝除一个目录名称之外的所有目录名称?
【发布时间】:2010-11-06 15:55:02
【问题描述】:

我有这个 .htaccess 文件,可以防止用户从浏览器物理访问文件(它们只能通过系统加载)

Options -Indexes
Order deny,allow
deny from all

我有一个问题,有时我通过 AJAX 加载文件,然后我得到 403 Forbidden。我对 apache 的 mod_access 几乎没有经验。我一直在阅读directory directive,因为我所有基于 AJAX 的文件都在一个名为 ajax 的目录中。

但问题是我需要拒绝访问除名为 ajax 的目录之外的所有目录,而且我缺乏正则表达式技能。

一个示例目录结构是这样的。

plugins/inventory/ajax
plugins/inventory/controller
plugins/inventory/view

plugins/packages/ajax
plugins/packages/controller
plugins/packages/view

.htaccess 文件位于插件目录中。

【问题讨论】:

    标签: apache .htaccess


    【解决方案1】:

    您首先需要这样做是项目架构的失败。本来不应该被 Web 访问的脚本文件不应该放在 DocumentRoot 中。

    也就是说,这可能会起作用:

    RewriteEngine on
    <DirectoryMatch "/(?!.*/ajax$)">
       Order deny,allow
       Deny from all
    </DirectoryMatch>
    

    【讨论】:

    • 感谢您的提示,原因是人们正在编写自动加载到系统中并且应该能够放入某个位置的插件。
    • 嗯,很有趣。那么,什么,它们需要在 DocumentRoot 中,因为它们是通过 HTTP PUT 或其他方式发布的?
    • 我明白你的意思,我们有可能以不同的方式实现插件。它们只是系统开发人员可以用来为系统编写插件的目录。
    • 似乎我在尝试任何操作时都会收到 500 内部服务器错误。 以及文档和您的答案中的多个项目组合。
    • @Ólafur:.htaccess 中不允许使用这两个指令,只能在服务器配置中使用。在您链接到自己的手册页中查看他们的“上下文”属性。
    猜你喜欢
    • 1970-01-01
    • 2016-05-06
    • 2020-04-30
    • 1970-01-01
    • 2019-06-19
    • 2020-05-11
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    相关资源
    最近更新 更多