如何防止 Ubuntu 18 中的 Apache 目录列表?

如何防止 Ubuntu 18 中的 Apache 目录列表?

我已经阅读了大量有关此内容的文章,并且开始有点困惑哪种方法才是正确的。

我没有文件httpd.conf,但是我在这里有一个apache2.conf文件:/etc/apache2/apache2.conf

<Directory /var/www/html/>
    Options -Indexes
</Directory>

(注明目录)

此外,标准站点可在此处找到:/etc/apache2/sites-available/000-default.conf

那么我应该添加下面哪个文件的内容?

<Directory />
    Options -Indexes
</Directory>

(如果放在这里就不需要注明目录,对吗?)

此外,文件内部000-default.conf还有类似 5 次的目录,就像这样......

<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

那么我可以编辑其中一个吗?还是我必须做一些完全不同的事情.htaccess?我相信这也可以。

答案1

您可以将其放在任意文件中的任何位置。

但是,将一个内容放在一个文件中而不是另一个文件中的原因取决于你。

好吧,当你第一次遇到这些东西时,你可能会感到困惑,但它也很简单。下面是详细分析。

首先,httpd.conf与 100% 相同apache2.conf。唯一的区别是/etc/httpd/httpd.confRedHat/CentOS 使用的 和/etc/apache2/apache2.confDebian/Ubuntu 使用的 。

接下来,什么是/etc/apache2/apache2.confversus /etc/apache2/sites-available/000-default.confversus /var/www/html/.htaccess?好问题,下面是答案。


/etc/apache2/apache2.conf

这是根/父 Apache 配置文件。如果您 100% 确定该计算机上的 Apache 服务器无论如何都不应该执行目录列表,只需在其中设置它。这将为服务器和计算机上的所有虚拟主机设置默认值:

<Directory /var/www/html/>
    Options -Indexes
</Directory>

通过重新启动 Apache sudo service apache2 restart,您就可以开始了。

/etc/apache2/sites-available/000-default.conf

这是 Apache 服务器的虚拟主机默认配置。此配置与此配置的主要区别在于,/etc/apache2/apache2.conf000-default.conf通常是人们针对其服务器进行调整和调整的地方。其优点是它简短而实用,如果需要,只需几行配置即可。缺点是,如果您使用虚拟主机,此处的设置将被另一个虚拟主机配置忽略。但如果您 100% 确定您只在设置中的一个主机上使用 Apache,那么这样做没有问题。

/var/www/html/.htaccess

我个人认为这是做类似事情的最佳位置。只要您的主/etc/apache2/apache2.conf设置为AllowOverride All(即启用.htaccess),这将是最简单的维护。主要是因为对apache2.conf000-default.conf以及中的任何内容的调整/etc/apache2/都需要管理员/根用户重新启动 Apache。

一些老派的开发人员可能有人说使用.htaccess不是一个好主意,因为它会强制 Apache 在每次页面加载时加载该文件,但在现代系统上,这是一个微不足道甚至不存在的问题。如果不使用 ,您可能会在页面加载时节省几分之一秒的时间.htaccess,但这在当今毫无意义。

如果您选择使用它,则.htaccess无需执行诸如在中定义它之<Directory /var/www/html/>类的操作。只需创建一个名为的文件.htaccess并将其内容设为:

Options -Indexes

保存它,你就没问题了。当然,如果有人删除、重命名或弄乱该文件并将其更改为Options +Indexes目录列表,就会再次发生这种情况。但就像我说的,所有这些配置选项都取决于需要和用途;并且没有一种最佳/权威的方法来做到这一点。

但希望这些选项能为您提供有关如何在 Apache 中禁用目录列表的想法。

此外,关于发生位置的层次结构,如果您在 中有一个设置apache2.conf,然后在 中又有另一个设置000-default.conf,然后在 中又有另一个设置,.htaccess那么 中的最终编辑才是最重要的。您基本上希望在或 中.htaccess设置所有合理且广泛的系统范围配置,然后将站点特定内容留在 中。apache2.conf000-default.conf.htaccess

重要的是最后一个设置。这是一堆层层叠加的设置,说实话一切可以,apache2.conf但配置只是被拆分,以便让你的生活更轻松。你可以将配置拆分成小文件,而不是一个庞大的整体配置。

相关内容