拒绝访问 .htaccess 中的一个特定文件夹

Posted

技术标签:

【中文标题】拒绝访问 .htaccess 中的一个特定文件夹【英文标题】:Deny access to one specific folder in .htaccess 【发布时间】:2013-10-07 17:57:46 【问题描述】:

我试图通过操纵 URL 来拒绝用户访问 site/includes 文件夹。

我不知道我是否必须拒绝所有内容并手动设置个别例外以允许,我是否可以拒绝这个文件夹,或者是否有可以使用的重写功能。

具体示例:我不想通过在 URL 中输入 localhost/site/includes 来查看目录文件。

【问题讨论】:

只是为了禁止列出目录在位于根文件夹的 .htaccess 文件中写入 Options -Indexes 【参考方案1】:

创建site/includes/.htaccess 文件并添加这一行:

Deny from all

【讨论】:

嘿! anubhava 我已经使用它来禁用对 /api 文件夹中我的 api 文件的直接访问,但现在所有 web 服务调用都发送 403 禁止状态.. 我只想在有人从浏览器访问它时阻止访问。 对于网络服务器,浏览器和非浏览器之间的请求之间没有真正的区别。 我用的是 nginx,我不能用 .htaccess。那么,没有 .htaccess 怎么办?谢谢 Deny from all 不会给出 404 而是 403。您仍然可以使用 php/Perl 等访问文件/文件夹,但不能使用 Web 请求。如果没有回答您的问题,您可以打开一个新问题。 注意,如果你想使用这个,apache应该允许它。在站点配置<Directory> 中,您至少需要有AllowOverride Limit【参考方案2】:

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

将以下行添加到 htaccess

RedirectMatch 403 ^/folder/?$

这将为文件夹返回 403 forbidden 错误,即:http://example.com/folder/ 但它不会阻止访问该文件夹内的文件和文件夹,如果您想阻止文件夹内的所有内容,只需将正则表达式模式更改为 @987654325 @.

另一个选项是mod-rewrite 如果启用了url-rewrting-module,您可以在root/.htaccss 中使用类似以下内容:

RewriteEngine on

RewriteRule ^folder/?$ - [F,L]

这将在内部将folder 的请求映射到forbidden 错误页面。

【讨论】:

使用 Apache 2.22 最好的解决方案是第一个:RedirectMatch..... 更喜欢这个答案,而不是在我需要拒绝访问的每个目录中创建多个 .htaccess 文件。 这是一个比标记为正确的答案更好的答案,认真【参考方案3】:

在您需要使用的.htaccess 文件中

Deny from  all

将其放入site/includes/.htaccess 以使其特定于includes 目录

如果您只想禁止列出可以使用的目录文件

Options -Indexes 

【讨论】:

这是递归的吗? @Abdillah 是的 如果我只是将Options -Indexes 添加到页面底部,我会收到“内部服务器错误500”吗? @OliverMGrech 检查您的 htaccess 中是否有其他任何内容导致服务器错误。 Apache 的错误日志文件可能会告诉您缺少什么或出了什么问题【参考方案4】:

我们会将目录设置为非常安全,拒绝所有文件类型的访问。下面是您要插入到 .htaccess 文件中的代码。

Order Allow,Deny 
Deny from all 

既然我们现在已经设置了安全性,我们现在想要允许访问我们想要的文件类型。为此,请将以下代码添加到您刚刚插入的安全代码下的 .htaccess 文件中。

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

您的最终.htaccess 文件将如下所示

Order Allow,Deny 
Deny from all 

<FilesMatch "\.(jpg|gif|png|php)$">
Order Deny,Allow
   Allow from all
</FilesMatch>

来源Allow access to specific file types in a protected directory

【讨论】:

这个答案让我很头疼。像魅力一样工作。【参考方案5】:

您可以为该文件夹创建一个 .htaccess 文件,应该拒绝访问

Deny from  all

或者您可以重定向到自定义 404 页面

Redirect /includes/ 404.html

【讨论】:

【参考方案6】:

只需将 .htaccess 放入您要限制的文件夹中

## no access to this folder

# Apache 2.4
<IfModule mod_authz_core.c>
    Require all denied
</IfModule>

# Apache 2.2
<IfModule !mod_authz_core.c>
    Order Allow,Deny
    Deny from all
</IfModule>

来源:MantisBT 来源。

【讨论】:

【参考方案7】:

创建 index.php、index.html、index.htm 是不安全的。因为,任何人都可以通过猜测文件名来访问指定目录中的文件。例如:http://yoursite.com/includes/file.dat 因此,推荐的方法是创建一个 .htaccess 文件来拒绝所有访问者;)。玩得开心!!

【讨论】:

【参考方案8】:

您也可以将此IndexIgnore * 放在您的根 .htaccess 文件中,以禁用所有网站目录(包括子目录)的文件列表

【讨论】:

这不会禁用文件列表,但会告诉自动索引器在构建索引时忽略所有文件。要禁用文件列表,您可以使用 Options -Indexes【参考方案9】:

您可以通过这种方式动态执行此操作:

mkdir($dirname);
@touch($dirname . "/.htaccess");
  $f = fopen($dirname . "/.htaccess", "w");
  fwrite($f, "deny from all");
fclose($f);

【讨论】:

【参考方案10】:

在 Apache 2.4 上,您可以在根 .htaccess 文件中使用 Apache &lt;If&gt; 表达式来阻止直接访问此特定子目录及其中的所有内容。

例如:

<If "%REQUEST_URI =~ m#^/site/includes($|/)#">
    Require all denied
</If>

【讨论】:

这是我一直在寻找的【参考方案11】:

由于某些我不明白的原因,创建文件夹/.htaccess 并添加“全部拒绝”对我不起作用。我不知道为什么,它看起来很简单但没有用,而是将 RedirectMatch 403 ^/folder/.*$ 添加到根 htaccess 中。

【讨论】:

Apache 服务器必须配置为支持子目录中的本地 .htaccess 文件。如果不是,那么创建本地文件显然不会有任何效果。

以上是关于拒绝访问 .htaccess 中的一个特定文件夹的主要内容,如果未能解决你的问题,请参考以下文章

拒绝访问 htaccess 中的多个文件

.htaccess 拒绝目录访问

.htaccess 拒绝访问图像文件夹,但允许访问查看单个图像

如何使用 htaccess 拒绝对文件夹的直接访问

.htaccess 拒绝所有人

阻止访问.htaccess中的特定文件