Options指令禁止的目录索引

时间:2011-03-14 16:58:17

标签: php apache .htaccess codeigniter

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

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

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

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

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

非常感谢任何帮助。

谢谢!

9 个答案:

答案 0 :(得分:60)

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

Options -Indexes

如果您无法访问+Indexes并希望列出&成员,则主持人可能必须将其设置为.htaccess。浏览目录内容,缺少默认index.html, index.php等。如果目录不应该有默认文件而您没有启用Indexes,则只能直接定位其中的内容的文件名。 / p>

默认情况下,许多Apache安装通常会禁用Indexes选项。

the Apache core documentation on Options

中提供了完整的详细信息

答案 1 :(得分:30)

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

禁止显示该目录

答案 2 :(得分:9)

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

答案 3 :(得分:9)

问题

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

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

无效的配置

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

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

并将以下行添加到.htaccess:

Options -Indexes

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

怎么可能,.htaccess中的其他设置正在运行,为什么不这个呢?怎么了?它应该工作! %#$&amp; ^ $%@#!!

修复

将httpd.conf的Options行更改为:

Options +FollowSymLinks

并重新启动网络服务器。

  

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

     

将选项与+或 - 混合使用不带有效语法   并且将在服务器启动期间通过语法检查拒绝   中止。

Voilà目录索引不再显示不包含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 LogLevels

请参阅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条目

在&lt; Directory&gt; ..&lt; / Directory&gt;中添加了以下行。 httpd.conf的一节:

LogLevel crit

解决方案1 ​​

我的虚拟主机的httpd.conf&lt;目录&gt; ..&lt; /目录&gt;配置:

<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 rename(mv)

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

    sudo httpd -k restart
    

    sudo apachectl restart
    
  4. 现在禁用了autoindex_mod。

    Linux发行版ap2dismod / ap2enmod命令

    禁用autoindex模块输入命令

        sudo a2dismod autoindex
    

    启用autoindex模块输入

        sudo a2enmod autoindex
    

答案 4 :(得分:4)

插入以下行:

<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

答案 5 :(得分:0)

我遇到了同样的错误,问题来自于我的代码中的MySql语句中的语法错误,特别是我的$ _session变量缺少&#34; &#39; 。需要花费数小时才能弄明白,因为在错误日志中,该语句具有误导性。希望它对某人有所帮助。

答案 6 :(得分:0)

在conf.d中添加此内容为我解决了此问题。

Options +Indexes +FollowSymLinks

答案 7 :(得分:0)

就我而言,这是造成此问题的错字:

<VirtualHost *.8080>

应该是

<VirtualHost *:8080>

答案 8 :(得分:0)

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