如何使用.htaccess拒绝除一个目录名之外的所有目录?

时间:2009-06-29 11:05:10

标签: apache .htaccess

我有这个.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文件位于plugins目录中。

1 个答案:

答案 0 :(得分:3)

首先,你需要做到这一点是项目架构的失败。 Web上不应该访问的脚本文件不应该放在DocumentRoot中。

尽管如此,这可能会奏效:

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