DocumentRoot 目录 Apache httpd

DocumentRoot 目录 Apache httpd

我想更改在 Windows 中运行的 Apache 的 httpd.conf 文件,但我想知道为什么需要使用(或声明)相同的根两次。

DocumentRoot "C:/Apache/htdocs"
<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
<Directory "C:/Apache/htdocs">
    AllowOverride None
    Order allow,deny
    Allow from all
  Options None
</Directory>

如果第一个有关于安全或访问的所有信息文档根目录,为什么我需要再次声明

在这种情况下是不同的,我可以传递最后的声明,如:<Directory“C:/Apache/htdocs”>吗?

Apache 是否可以省略最后的 <Directory "C:/Apache/htdocs"> 运行?

我找不到其中的意义。

谢谢。

答案1

我来自 UNIX/Linux 领域,但我认为您对配置的理解有些误读。让我们将您的配置分为 3 个部分(好吧,它已经分为 3 个部分了)。

首先,DocumentRoot 完全是独立的,对于您的问题/疑问,请忽略它。

其次,将“目录 /”配置为全部拒绝。这不是针对您的 DocumentRoot,而是针对您的文件系统的根目录(我真的不知道 Apache 在 Windows 上如何解释这一点,但对于 Linux 和 UNIX 来说确实如此)。

第三,将目录“C:/Apache/htdocs”配置为允许所有人来自您的 DocumentRoot。

这是基本的 Apache 性能和安全调整,并且可能是目前几乎所有 Apache HTTPD 发行版的默认设置。

第一个目录列表中的“AllowOverride None”阻止 Apache 检查文档根目录上方的每个目录是否存在覆盖(.htaccess 文件)。

来自 Apache 文档: When this directive is set to None, then .htaccess files are completely ignored. In this case, the server will not even attempt to read .htaccess files in the filesystem.

因此,如果您删除“Directory /”节:那么 Apache 会在到达“Directory C:/Apache/htdocs”目录之前查找 c:/.htaccess 和 c:/Apache/.htaccess。它不会再进一步​​查找,因为 c:/Apache/htdocs 已设置“AllowOverride None”。您的网站将加载,但您不必要地增加了 Apache 为其提供服务所需的工作量。

现在,如果您删除“目录“C:/Apache/htdocs””节:那么您将陷入“目录 /”的设置,其中包括“拒绝所有人”。您的网站将无法加载。

在我看来,该配置是正确的。

相关内容