【问题标题】:Directory index forbidden by Options directive选项指令禁止的目录索引
【发布时间】:2011-07-15 04:17:45
【问题描述】:

我正在为 codeigniter 使用 dompdf 插件:http://codeigniter.com/wiki/PDF_generation_using_dompdf/

从表单生成 pdf。这适用于本地主机,但在实时服务器上,我在错误日志中得到了这个:

Directory index forbidden by Options directive: /var/www/vhosts/domain.co.uk/httpdocs/mm/userdata/account1/invoices/

知道这意味着什么吗?我搜索了答案,发现了一些建议编辑 httpd.conf,但是我无权访问。

我还尝试将空白 index.html 文件添加到根目录和文档目录(如其他地方建议的那样,但无济于事)。

非常感谢任何帮助。

谢谢!

【问题讨论】:

  • 另外,该路径对于我想要 PDF 的位置是正确的。
  • 嗯,好的,谢谢你的回复。是的,当我尝试查看 PDF 应该位于的 url 时,我遇到了这个错误(但它不存在,也没有 index.* 文件)。原来是父母的文件权限阻止了正在生成的 PDF。再次感谢!

标签: php apache .htaccess codeigniter


【解决方案1】:

此目录或附近父目录中的主要httpd.conf.htaccess 文件可能包括:

Options -Indexes

如果您在.htaccess 中没有访问权限并且想要列出和浏览目录内容,缺少默认index.html, index.php 等,您的主机可能必须将其设置为+Indexes。如果目录不应该有一个默认文件并且你没有启用Indexes,你只能直接定位其中内容的文件名。

Indexes 选项在许多 Apache 安装中通常默认禁用。

详情请见the Apache core documentation on Options

【讨论】:

  • -+ 之间有什么区别?
  • @FranciscoCorralesMorales Apache core docs for Options: " 任何以 + 开头的选项都将添加到当前有效的选项中,任何以 - 开头的选项都将从当前有效的选项中删除"
  • Options Indexes 为我
  • Options +Indexes 让我崩溃了 apache。 Options Indexes 只是不起作用。
  • @Kokodoko 如果它“崩溃”,请检查错误日志。您可能在无效的上下文中使用它。
【解决方案2】:

这意味着该目录中没有默认文档(index.html、index.php 等...)。在大多数网络服务器上,这意味着它将显示目录内容的列表。但是服务器配置禁止显示该目录(Options -Indexes

【讨论】:

  • 如果这些错误在我的 error_log 中出现了很多,那么假设蜘蛛试图爬取被禁止的目录是否安全,或者我应该假设用户试图到达那里?
【解决方案3】:

问题

不包含 index.html 或 index.php 文件的目录在 Web 浏览器中可见的索引。

我在 Scientific Linux 的 httpd Web 服务器上的配置遇到了很多麻烦,无法停止显示这些索引。

不起作用的配置

httpd.conf 虚拟主机目录指令:

<Directory /home/mydomain.com/htdocs>
    Options FollowSymLinks
    AllowOverride all
    Require all granted
</Directory>

在 .htaccess 中添加以下行:

Options -Indexes

目录索引仍在显示。 .htaccess 设置不起作用!

怎么可能,.htaccess 中的其他设置都可以正常工作,为什么不是这个呢?怎么回事?它应该工作! %#$&^$%@# !!

修复

将 httpd.conf 的 Options 行更改为:

Options +FollowSymLinks

并重新启动网络服务器。

来自 Apache 的核心模组页面:(https://httpd.apache.org/docs/2.4/mod/core.html#options)

将带有 + 或 - 的选项与没有的混合是无效的语法 并且将在服务器启动期间被语法检查拒绝 中止。

不包含 index.html 或 index.php 文件的目录不再显示目录索引。

现在什么!新皱纹

当尝试进行此类目录访问时,新条目开始出现在“error_log”中:

[Fri Aug 19 02:57:39.922872 2016] [autoindex:error] [pid 12479] [client aaa.bbb.ccc.ddd:xxxxx] AH01276: Cannot serve directory /home/mydomain.com/htdocs/dir-without-index-file/: No matching DirectoryIndex (index.html,index.php) found, and server-generated directory index forbidden by Options directive

此条目来自 Apache 模块“autoindex”,其 LogLevel 为“error”,如错误消息的 [autoindex:error] 所示——格式为 [module_name:loglevel]。

要阻止记录这些新条目,需要将 LogLevel 更改为更高级别(例如“crit”)以减少记录——只记录更严重的错误消息。

Apache 2.4 日志级别

请参阅 Apache 2.4 的核心指令以获取 LogLevel

emerg、alert、crit、error、warn、notice、info、debug、trace1、trace2、trace3、tracr4、trace5、trace6、trace7、trace8

列表中更深的每个级别都会记录任何先前级别的所有消息。

Apache 2.4 的默认级别是“警告”。因此,所有归类为 emerg、alert、crit、error 和 warn 的消息都会写入 error_log。

停止新的 error_log 条目的附加修复

在 httpd.conf 的 .. 部分中添加了以下行:

LogLevel crit

解决方案 1

我的虚拟主机的 httpd.conf .. 配置:

<Directory /home/mydomain.com/htdocs>
    Options +FollowSymLinks
    AllowOverride all
    Require all granted
    LogLevel crit
</Directory>

并添加到 /home/mydomain.com/htdocs/.htaccess,即您网站的 .htaccess 文件的根目录:

Options -Indexes

如果您不介意“错误”级别的消息,请省略

LogLevel crit

Scientific Linux - 解决方案 2 - 禁用 mod_autoindex

您的网络空间内不再需要自动索引目录。 .htaccess 没有变化。但是,需要访问/etc/httpd中的httpd配置文件

  1. 编辑 /etc/httpd/conf.modules.d/00-base.conf 并注释该行:

    LoadModule autoindex_module modules/mod_autoindex.so
    

    在它前面添加一个 # 然后保存文件。

  2. 在目录/etc/httpd/conf.d 重命名(mv)

    sudo mv autoindex.conf autoindex.conf.<something_else>
    
  3. 重启httpd:

    sudo httpd -k restart
    

    sudo apachectl restart
    

autoindex_mod 现在已禁用。

带有 ap2dismod/ap2enmod 命令的 Linux 发行版

禁用自动索引模块输入命令

    sudo a2dismod autoindex

启用自动索引模块进入

    sudo a2enmod autoindex

【讨论】:

    【解决方案4】:

    如果您正在运行 RHEL(我遇到过),您可能会遇到的另一个问题是,有一个配置了 httpd 包的默认欢迎页面,即使您放置了选项索引,它也会覆盖您的设置。该文件位于 /etc/httpd/conf.d/welcome.conf 中。有关更多信息,请参阅以下链接: http://wpapi.com/solved-issue-directory-index-forbidden-by-options-directive/

    【讨论】:

    • 同样的事情也发生在 CentOS 6.4 上,我想我之前在 6.3 上看到过。谢谢 majikman,这是我第三次遇到这个问题,我知道这很容易解决,但一时想不起来。
    【解决方案5】:

    插入以下行:

    <Directory "C:/Program Files (x86)/Apache Software Foundation/Apache2.2/htdocs">
            Options  +Indexes
    </Directory>
    

    在您的 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\extra\httpd-vhosts.conf 文件中。我假设您正在使用虚拟主机进行开发。

    然后,当然,只需重新启动 Apache。

    Documentation

    【讨论】:

      【解决方案6】:

      我遇到了同样的错误,问题来自我的代码中的 MySql 语句中的语法错误,特别是我的 $_session 变量缺少 "' em>。花了几个小时才弄明白,因为在错误日志中,该语句具有误导性。希望它对某人有所帮助。

      【讨论】:

        【解决方案7】:

        在 conf.d 中添加它为我解决了这个问题。

        Options +Indexes +FollowSymLinks
        

        【讨论】:

          【解决方案8】:

          在我的情况下,这是一个错字导致了这个问题:

          <VirtualHost *.8080>
          

          应该是

          <VirtualHost *:8080>
          

          【讨论】:

            【解决方案9】:

            如果您一直在进行性能调整,您可能已经删除了 mod_dir。尝试将其放回原处,这可能会解决您的问题。

            【讨论】:

              猜你喜欢
              • 2011-10-28
              • 2012-05-09
              • 1970-01-01
              • 2021-06-14
              • 1970-01-01
              • 2017-03-09
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多