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> 拒绝所有的主要内容,如果未能解决你的问题,请参考以下文章
Apache配置文件httpd.conf/htaccess中deny和allow的使用