通过Options指令禁止的目录索引

我正在使用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/ 

任何想法这是什么意思? 我search了答案,并发现一些build议编辑httpd.conf,但我没有访问此。

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

任何帮助不胜感激。

谢谢!

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

 Options -Indexes 

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

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

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

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

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

问题

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

我在Scientific Linux的httpd web服务器上configuration了很多的麻烦,停止显示这些索引。

没有工作的configuration

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

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

并添加以下行到.htaccess:

 Options -Indexes 

目录索引仍然出现。 .htaccess设置不工作!

这怎么可能,.htaccess的其他设置工作,为什么不这样做? 怎么回事 它应该工作! %#$&^ $%@#!!

修正

将httpd.conf的选项行更改为:

 Options +FollowSymLinks 

并重新启动networking服务器。

从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”,其错误消息的[autoindex:error]所指示的LogLevel为“error”,格式为[module_name:loglevel]。

要停止logging这些新条目,需要将LogLevel更改为更高的级别(例如“crit”)以logging更less的—只有更严重的错误消息。

Apache 2.4 LogLevels

请参阅Apache 2.4 LogLevel的核心指令。

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

深入到列表中的每个级别logging任何以前级别的所有消息。

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

其他修复程序停止新的error_log条目

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

 LogLevel crit 

解决scheme1

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

 <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 

科学Linux – 解决scheme2 – 禁用mod_autoindex

没有更多的自动索引你的networking空间内的目录。 没有更改.htaccess。 但是,需要访问/ etc / httpd中的httpdconfiguration文件

  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现在被禁用。

Linux发行版与ap2dismod / ap2enmod命令

禁用autoindex模块input命令

  sudo a2dismod autoindex 

启用autoindex模块进入

  sudo a2enmod autoindex 

插入以下行:

 <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。

文档