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

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

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

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

【问题讨论】:

  • 只是为了禁止列出目录在位于根文件夹的 .htaccess 文件中写入 Options -Indexes

标签: apache .htaccess


【解决方案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 文件。如果不是,那么创建本地文件显然不会有任何效果。
          猜你喜欢
          • 2011-01-12
          • 2011-05-11
          • 2016-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-05
          • 1970-01-01
          • 2015-05-28
          相关资源
          最近更新 更多