如何在Apache Web服务器中启用目录列表

42
我无法在我的Apache Web服务器中启用目录列表。 我尝试了发布的各种解决方案,但它没有起作用。 我刚刚安装了httpd 2.4.6并使用 /etc/httpd/conf.d/ssl.conf 目录下的 ssl.conf 启用了HTTPS,并尝试访问https://server.example.com/,但这不会列出目录。 这些是 ssl.conf 文件中的配置:
DocumentRoot "/home/userx/Downloads/"
ServerName server.example.com:443

以下是在VirtualHost元素下{ssl.conf}中的内容。当我安装时,文件和第一个{Directory}元素已经存在,我只是为“/home/userx/Downloads”添加了{Directory}。当我访问URL https://server.example.com/ 时,我想浏览 {/home/userx/Downloads} 的内容。我错过了什么?

<Files ~ "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
<Directory "/home/userx/Downloads">
  Options +Indexes
  AllowOverride all
</Directory>
8个回答

29

请检查是否能够访问/列出“/icons/”目录。这对于测试Apache中的“Directory”行为非常有用。

例如:您可能默认在httpd.conf文件中拥有以下配置。因此,请访问URL IP:Port/icons/并检查是否列出了图标。您也可以尝试将“目录/文件夹”放入“var/www/icons”中。

Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons">
    Options Indexes MultiViews
    AllowOverride None
    Require all granted
</Directory>

如果它能够正常工作,那么您可以使用“<Directory "/var/www/icons">”配置交叉检查或修改自定义目录配置。


如果您遇到“AuthType”错误,请删除“Require all granted”这一行(https://dev59.com/k2Ei5IYBdhLWcg3wd8AF)。 - m13r

16
根据Apache文档,在此处找到,需要在网站.conf文件中指定DirectoryIndex指令(通常位于Linux的/etc/apache2/sites-available目录中)。 引用文档的话说:
如果在目录中找不到来自DirectoryIndex指令的文件,则mod_autoindex可以生成目录内容列表。这是使用Options指令打开和关闭的。例如,要为特定目录启用目录列表,可以使用:
<Directory /usr/local/apache2/htdocs/listme>
  Options +Indexes
</Directory>
为了防止目录列表(例如出于安全目的),您应该从配置文件中的每个Options指令中删除Indexes关键字。或者,为了仅针对单个目录防止它们,您可以使用:

为了防止目录列表(例如出于安全目的),您应该从配置文件中的每个Options指令中删除Indexes关键字。或者,为了仅针对单个目录防止它们,您可以使用:

<Directory /usr/local/apache2/htdocs/dontlistme>
  Options -Indexes
</Directory>

非常有用的答案..终于可以工作了! - supersan
你的引用甚至没有说必须要指定,更不用说在.conf文件中了。它也可以在本地的.htaccess文件中指定,或者完全省略。 - user207421
是的,这对我很有帮助。在 .htaccess 文件中放置 Options +Indexes 将启用每个文件夹基础上的文件和目录列表。不要在 .htaccess 文件中使用 <Directory> 标签。 - lww
是的,对我很有帮助。在.htaccess文件中添加Options +Indexes将会在每个文件夹的基础上启用文件和目录列表。请不要在.htaccess文件中使用<Directory>标签。 - undefined

8
尝试这个。
<Directory "/home/userx/Downloads">
  Options +Indexes
  AllowOverride all
  Order allow,deny 
  Allow from all 
  Require all granted
</Directory>

如果这样还不行的话,你可能有某些地方设置了“拒绝索引”,它会覆盖你的配置。

更改为您的建议并重新启动服务器后仍然无法工作。日志显示如下:[Tue Aug 30 18:40:46.492983 2016] [authz_core:debug] [pid 20665] mod_authz_core.c(809): [client 171.71.229.25:59061] AH01626: 要求所有拒绝的授权结果:被拒绝 [Tue Aug 30 18:40:46.493000 2016] [authz_core:debug] [pid 20665] mod_authz_core.c(809): [client 171.71.229.25:59061] AH01626: 授权结果<RequireAny>:被拒绝 - Satish Burnwal
为了测试,请将 index.html 的权限设置为 775。这样做后还允许吗? - Eddimull
我已经对 index.html 进行了 chmod 755 的操作,但还没有成功。我还确保了对 / 目录进行 chmod 755 的操作。 - Satish Burnwal
是否有任何日志可以显示服务器执行了什么拒绝规则?或者有任何方式可以启用这些日志吗?我想知道它是如何决定拒绝访问的。 - Satish Burnwal
你创建的目录执行 chmod -R 775 命令? - Eddimull
显示剩余3条评论

6

我通过启用 Apache 中的 mod_autoindex 解决了这个问题。它默认是禁用的。

sudo a2enmod autoindex

你是如何启用它的? - Ankur Agarwal
sudo a2enmod autoindex - OKE
a2enmod:找不到命令 - Kokodoko
@Kokodoko,那是因为a2enmod是Debian的东西。 - Sliced Bread

3

我曾修改了我的配置文件中的Options -IndexOptions +Index,这样我就删除了欢迎页面并重新启动了服务。

$ sudo rm -f /etc/httpd/conf.d/welcome.conf
$ sudo service httpd restart

之后,我可以看到目录列表。


3
这个解决了我的问题,它是一个SELinux设置:
chcon -R -t httpd_sys_content_t /home/*

这正是我的问题。对于其他人,请将/home/更改为您的内容路径(在我的情况下为/var/repo/)。由于您正在使用-R,可能不是必需的。 - Patrick Taylor

1
我必须禁用SELinux模块才能使其正常工作。注意:系统需要重新启动以使SELinux生效。

0

一种方法是通过在/var/www/html/目录中创建软链接来列出您想要列出的任何目录。

sudo ln -s /home/ /var/www/html/

记得要保护好安全性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接