htaccess <Directory> 拒绝所有

Posted

技术标签:

【中文标题】htaccess <Directory> 拒绝所有【英文标题】:htaccess <Directory> deny from all 【发布时间】:2012-01-30 19:03:57 【问题描述】:

我最近一直在清理我的项目。我在根目录中有一个主 .htaccess 和其他 6 个。其中 5 个运行Options -Indexes,我没有看到任何允许任何目录查看的点,因此将其移至主要目录。所以现在我只有 2 个 .htaccess 文件。 /system 中的主要和一个拥有

# Block External Access
deny from all

所以我想只在主目录中在/system 上运行它。所以我删除了/system中的那个并添加了

 # Block External Access
<Directory "/system/">
deny from all
</Directory>

到我的主 .htaccess 文件留下 1!

但现在我得到了一个

内部服务器错误

服务器遇到内部错误或配置错误,并且 无法完成您的请求。

请联系服务器管理员 webmaster@localhost 和 通知他们错误发生的时间,以及您可能会做的任何事情 这样做可能会导致错误。

有关此错误的更多信息可能在服务器错误中可用 记录。

Apache/2.2.17 (Ubuntu) 服务器位于 10.0.1.5 端口 80

目标是阻止读取 /system 及其子目录中的任何文件,但允许查看整个项目的一个 .htaccess 文件中的所有其他内容。关于如何解决这个问题的任何想法?我进行了一些 Google 搜索,但无法真正找到任何结果。

【问题讨论】:

【参考方案1】:

您不能在 .htaccess 中使用 Directory directive。但是,如果您在 /system 目录中创建一个 .htaccess 文件并将以下内容放入其中,您将得到相同的结果

#place this in /system/.htaccess as you had before
deny from all

【讨论】:

是的。我之前在 /system 中放置了一个 .htaccess。只是想为整个项目只有一个。我猜我不能也必须那样做。 对于 windows 用户,请确保通过从某些文本编辑器另存为文件,使文件名准确为 .htaccess,因为 windows 资源管理器不允许您删除文件名。这对我来说是个问题 您可以在文件资源管理器中创建.htaccess 文件和其他以点开头的文件。只需将其命名为.htaccess.,末尾的点禁用检查名称是否以点开头(它会自动删除)。【参考方案2】:

您还可以使用 RedirectMatch 指令拒绝对文件夹的访问。

要拒绝对文件夹的访问,您可以在 htaccess 中使用以下 RedirectMatch :

 RedirectMatch 403 ^/folder/?$

这将禁止外部访问 /folder/ 例如:http://example.com/folder/ 将返回 403 禁止错误。

要拒绝访问文件夹内的所有内容,您可以使用:

RedirectMatch 403 ^/folder/.*$

这将阻止对整个文件夹的访问,例如:http://example.com/folder/anyURI 将向客户端返回 403 错误响应。

【讨论】:

@Anthony 这适用于所有版本的 Apache 。在发布到这里之前,我已经在本地和实时服务器上对其进行了测试。您确定您使用的服务器是 Apache 吗?还要确保在 htaccess 顶部使用此代码,然后再使用 htaccess 中的其他规则,否则该指令将被忽略。 是的,它是 apache...但是“RewriteRule ^folder/ - [F,L]” 确实可以正常工作。 Arhhh... 目录 URI 不在顶层,但在添加完整的 URI 路径后,它确实可以正常工作。但是,如果可能的话,我不想在“.htaccess”文件中编码 URL 路径!目录四处移动,“.htaccess”文件中不应需要 URI 路径。【参考方案3】:

你可以从根目录使用:

RewriteEngine On
RewriteRule ^(?:system)\b.* /403.html

或者:

RewriteRule ^(?:system)\b.* /403.php # with header('HTTP/1.0 403 Forbidden');

【讨论】:

添加到 ".htaccess" "RewriteRule ^folder/ - [F,L]" 是的,您会看到一个目录重定向(对于结尾的“/”),但该重定向随后会失败。它似乎也将其从自动索引列表中删除!

以上是关于htaccess <Directory> 拒绝所有的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess Rewrite apache重写和配置

Apache配置文件httpd.conf/htaccess中deny和allow的使用

htaccess不起作用的解决方法,AllowOverride All打开后出现403错误时解决办法

.htaccess 没有被使用 XAMPP 读取

.htaccess 关于 xampp 2 问题

htaccess - RewriteRules 声明导致 404 错误