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

Óla*_*age 3 apache .htaccess

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

Options -Indexes
Order deny,allow
deny from all
Run Code Online (Sandbox Code Playgroud)

但我有一个问题,有时我通过 AJAX 加载文件,然后收到 403 Forbidden。我对 apache 的 mod_access 没什么经验。我一直在阅读目录指令,因为我所有基于 AJAX 的文件都位于一个名为 ajax 的目录中。

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

示例目录结构如下所示。

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

plugins/packages/ajax
plugins/packages/controller
plugins/packages/view
Run Code Online (Sandbox Code Playgroud)

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

cha*_*aos 5

你首先需要这样做就是项目架构的失败。不应该通过 Web 访问的脚本文件首先就不应该位于 DocumentRoot 中。

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

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

  • @Ólafur:这两个指令都不允许出现在“.htaccess”内部,只能出现在服务器配置中。请参阅您链接到自己的手册页中的“Context”属性。 (2认同)