Apache Directory指令是否应该相对于DocumentRoot?


14

Apache Directory指令是否应该相对于DocumentRoot?我在VirtualHost的上下文中询问,但不应有任何区别。

换句话说,它应该是:

<VirtualHost>
    DocumentRoot /var/www
    <Directory /var/www>
    ...

要么

<VirtualHost>
    DocumentRoot /var/www
    <Directory />
    ...

两者都可以。在Apache的目录文档说:

Directory-path可以是目录的完整路径,也可以是通配符字符串。

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

ED:Apache Performance Tuning页面上的FollowSymLinks和SymLinksIfOwnerMatchAllowOverride部分中也有相互矛盾的示例。

为了好玩,我查看了Debian的默认虚拟主机设置,发现了以下内容:

<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>
    ...

Answers:


9

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

您的第一个示例是如何配置VirtualHosts的伪指令,并将伪指令中的选项仅应用于DocumentRoot。您的第二个示例是指文件系统根(字面上是/)。

您尚未发布该指令的其余部分,但这通常用作试图使Apache入狱并限制其访问的方法,通常(但并非总是)放置在主文件apache2.confhttpd.conf配置文件中,并且您的VirtualHosts明确允许访问自己的DocumentRoot目录,因此经常将两者一起使用。

Apache文档中

请注意,对<Directory />的默认访问是允许所有访问。这意味着Apache httpd将提供从URL映射的任何文件。建议您使用以下代码块来更改此代码:
    <目录/>
      要求全部拒绝
    </目录>
然后将其替换为您想要访问的目录。有关更多详细信息,请参见“ 安全提示”页面。

如果第二个示例从字面上指向文件系统/,那么Apache为什么要提供/var/www目录服务?
杰夫

1
Apache将为DocumentRoot。该Directory指令是完全独立的,其作用是说“将封闭的配置应用于此目录和所有子目录”。更具体的配置优先,因此<Directory /var/www/>将覆盖<Directory />
Craig Watson

我知道了。因此,<Directory />从VirtualHost上下文可以覆盖服务器范围的选项(或其他设置)<Directory />吗?那讲得通。谢谢您的帮助。
杰夫,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.