Options指令禁止的目录索引

log*_*nit 52 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/
Run Code Online (Sandbox Code Playgroud)

知道这意味着什么吗?我已经搜索了答案,并发现了一些建议编辑httpd.conf,但我没有访问权限.

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

任何帮助非常感谢.

谢谢!

Mic*_*ski 61

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

Options -Indexes
Run Code Online (Sandbox Code Playgroud)

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

Indexes在许多Apache安装中,默认情况下通常禁用该选项.

Apache核心文档中提供了完整的详细信息Options

  • @FranciscoCorralesMorales [用于`选项`的Apache核心文档](http://httpd.apache.org/docs/current/mod/core.html#options):_"任何以+开头的选项都会添加到当前的选项中强制,以及任何前面带有 - 的选项将从当前有效的选项中删除"_ (3认同)
  • `-`和`+`之间有什么区别? (2认同)

Mar*_*c B 30

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


maj*_*man 10

如果您正在运行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,这是我第三次遇到这个问题而且我知道这是一个简单的修复,但不能记得它. (3认同)

kao*_*ngr 10

问题

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

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

配置不起作用

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

<Directory /home/mydomain.com/htdocs>
    Options FollowSymLinks
    AllowOverride all
    Require all granted
</Directory>
Run Code Online (Sandbox Code Playgroud)

并在.htaccess中添加以下行:

Options -Indexes
Run Code Online (Sandbox Code Playgroud)

目录索引仍然出现..htaccess设置不起作用!

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

修复

将httpd.conf的Options行更改为:

Options +FollowSymLinks
Run Code Online (Sandbox Code Playgroud)

并重新启动Web服务器.

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

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

对于不包含index.html或index.php文件的目录,不再显示Voilà目录索引.

怎么办!一个新的皱纹

尝试进行此类目录访问时,新条目开始显示在"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
Run Code Online (Sandbox Code Playgroud)

此条目来自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条目

在httpd.conf的<Directory> .. </ Directory>部分中添加了以下行:

LogLevel crit
Run Code Online (Sandbox Code Playgroud)

解决方案1

我的虚拟主机的httpd.conf <Directory> .. </ Directory>配置:

<Directory /home/mydomain.com/htdocs>
    Options +FollowSymLinks
    AllowOverride all
    Require all granted
    LogLevel crit
</Directory>
Run Code Online (Sandbox Code Playgroud)

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

Options -Indexes
Run Code Online (Sandbox Code Playgroud)

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

LogLevel crit
Run Code Online (Sandbox Code Playgroud)

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

不再对Web空间中的目录进行自动索引.没有更改.htaccess.但是,需要访问/ etc/httpd中的httpd配置文件

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

    LoadModule autoindex_module modules/mod_autoindex.so
    
    Run Code Online (Sandbox Code Playgroud)

    通过在它前面添加一个#然后保存文件.

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

    sudo mv autoindex.conf autoindex.conf.<something_else>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重启httpd:

    sudo httpd -k restart
    
    Run Code Online (Sandbox Code Playgroud)

    要么

    sudo apachectl restart
    
    Run Code Online (Sandbox Code Playgroud)

autoindex_mod现已禁用.

Linux发行版ap2dismod/ap2enmod命令

禁用autoindex模块输入命令

    sudo a2dismod autoindex
Run Code Online (Sandbox Code Playgroud)

启用autoindex模块进入

    sudo a2enmod autoindex
Run Code Online (Sandbox Code Playgroud)


Fra*_*les 5

插入这一行:

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

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

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

文档