我想更改在 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””节:那么您将陷入“目录 /”的设置,其中包括“拒绝所有人”。您的网站将无法加载。
在我看来,该配置是正确的。