Apache Directory 指令是否应该与 DocumentRoot 相关?

Jef*_*eff 16 directory apache-2.2

ApacheDirectory指令是否应该与 DocumentRoot 相关?我在 VirtualHost 的上下文中询问,但它应该没有任何区别。

换句话说,它应该是:

<VirtualHost>
    DocumentRoot /var/www
    <Directory /var/www>
    ...
Run Code Online (Sandbox Code Playgroud)

或者

<VirtualHost>
    DocumentRoot /var/www
    <Directory />
    ...
Run Code Online (Sandbox Code Playgroud)

两者都有效。在Apache的目录文档说:

Directory-path 要么是目录的完整路径,要么是通配符字符串...

...但随后他们展示了两个与“完整路径”声明相矛盾的例子。

ED:Apache Performance Tuning 页面上的FollowSymLinks 和 SymLinksIfOwnerMatch以及AllowOverride部分也有相互矛盾的例子。

为了好玩,我查看了 Debian 的默认 vhost 设置,发现了这个:

<VirtualHost *:80>
    DocumentRoot /var/www
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory /var/www/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
    ...
Run Code Online (Sandbox Code Playgroud)

Cra*_*son 10

文档是正确的,<Directory>指令应该是完整路径。

您的第一个示例是您应该如何为 VirtualHosts 配置指令,并将指令中的选项应用于DocumentRoot. 你的第二个例子是指文件系统根(字面意思/)。

您还没有发布指令的其余部分,但这通常用作尝试监禁 Apache 并限制其访问的一种方式,并且通常(但不总是)放置在主文件apache2.confhttpd.conf配置文件中,您的 VirtualHosts 明确允许访问各自的DocumentRoot目录,因此两者经常一起使用。

Apache 文档

请注意,<Directory /> 的默认访问权限是允许所有访问权限。这意味着 Apache httpd 将提供从 URL 映射的任何文件。建议您使用以下块更改此设置:
    <目录 />
      要求全部拒绝
    </目录>
然后为您想要访问的目录覆盖它。有关更多详细信息,请参阅安全提示页面。