通过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文件
-
编辑/etc/httpd/conf.modules.d/00-base.conf并注释该行:
LoadModule autoindex_module modules/mod_autoindex.so
在它前面添加一个#然后保存该文件。
-
在目录/etc/httpd/conf.d中重命名(mv)
sudo mv autoindex.conf autoindex.conf.<something_else>
-
重新启动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。
文档