选项如何在 Apache 中工作

Luc*_*c M 2 httpd.conf apache-2.2

进入原来的httpd.conf,我有

Options Indexes FollowSymLinks
Run Code Online (Sandbox Code Playgroud)

我在 /etc/httpd/conf.d/ 中创建了一个配置文件

NameVirtualHost 192.168.0.2:8009
<VirtualHost  192.168.0.2:8009>
    DocumentRoot /var/www/html/deve
    ServerName "deve:8009"
    ErrorLog /var/www/deve_errorlog
    CustomLog /var/www/deve_customlog common
    Options -ExecCGI -Indexes
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

我重新启动服务器,我仍然可以看到文件

http://192.168.0.2:8009/images
Run Code Online (Sandbox Code Playgroud)

我认为更具体的规则高于一般规则

我在哪里错过了什么?

Col*_*Cat 8

您基本上是正确的,但是在选项的使用中遗漏了一个微妙之处。

但是,首先,不要只是将它们粘贴在 NameVirtualHost 容器中,而是使用目录语句...

您是正确的,最具体的那些适用,但是,如果选项语句包含一个选项列表,其中每个选项以 + 或 - 为前缀,那么这些选项将与任何现有选项合并...

这意味着

Options Indexes FollowSymLinks
Run Code Online (Sandbox Code Playgroud)

Options -ExecCGI -Indexes
Run Code Online (Sandbox Code Playgroud)

来形成

Options Indexes FollowSymLinks -ExecCGI
Run Code Online (Sandbox Code Playgroud)

看看 apache 文档http://httpd.apache.org/docs/2.2/mod/core.html

特别是在示例中:

...如果第二个 Options 指令使用 + 和 - 符号:

<Directory /web/docs>
   Options Indexes FollowSymLinks
</Directory>

<Directory /web/docs/spec>
   Options +Includes -Indexes
</Directory>
Run Code Online (Sandbox Code Playgroud)

然后为/web/docs/spec目录设置选项 FollowSymLinks 和 Includes 。

因此,Apache 在您的配置中表现出的行为是正确的。

我只是明确声明 NameVirtualHost 的选项如下:

<Directory /var/www/html/deve>
  Options +FollowSymlinks -Indexes -ExecCGI
</Directory>
Run Code Online (Sandbox Code Playgroud)