为什么当我使用根目录时,Apache 配置有效



我有一个VirtualHost,我用它来处理对/var/www/project/src中的文件的请求。

我还有一个 Perl 脚本(CGI 二进制文件),它是/var/www/project/src/cgi-bin/index.pl.

这是指令中与我的问题相关的部分:

<VirtualHost example.com:443>
...
DocumentRoot "/var/www/project/src"
<Directory "/var/www/project/src">
Require all granted
Options +MultiViews +ExecCGI
AddHandler cgi-script .pl
DirectoryIndex /cgi-bin/index.pl
</Directory>
</VirtualHost>

服务器启动,但对主机的访问失败,因为我收到 403 错误。

Apache日志指示Web服务器找不到{document-root}/cgi-bin/index.pl

[Thu Nov 09 11:37:03.578316 2017] [autoindex:error] 
[pid 122783] [client example-client.com:57203] AH01276: 
Cannot serve directory /var/www/project/src/: No matching
DirectoryIndex (/cgi-bin/index.pl) found, and server-
generated directory index forbidden by Options directive

此目录和index.pl文件位于正确的位置,归apache用户所有,并具有允许其他人读取目录内容并执行index.plCGI-bin的权限。

此外,如果我更改DocumentRootDirectory变量中的路径,则以下配置有效:

<VirtualHost example.com:443>
...
DocumentRoot "/"
<Directory "/">
Require all granted
Options +MultiViews +ExecCGI
AddHandler cgi-script .pl
DirectoryIndex /var/www/project/src/cgi-bin/index.pl
</Directory>
</VirtualHost>

Apache启动,我对主机的访问依次加载/cgi-bin/index.pl,这是正确呈现的。

问题:什么会导致第一组指令失败,第二组指令在哪里工作?

更具体地说:是什么阻止了第一组指令在指定的文档根目录中查找/cgi-bin/index.pl,而第二组指令正确查找完全限定路径/var/www/project/src/cgi-bin/index.pl

注意:...中的项目似乎与问题无关 - 无论是删除,更改还是保留它们,在任何情况下,错误和日志消息都是相同的 - 因此为了简洁起见,我将它们省略了。

尝试更改/var/www、/var/www/project、/var/www/project/src 和/或/var/www/project/src/cgi-bin 的权限

更新:另外,不要忘记在进行更改后重新启动Apache服务器。

正在发生的事情是你过度的热情和过度的热情......在第一个示例中,DirectoryIndex /cgi-bin/index.pl指向您的 ROOT 目录,然后搜索文件夹调用方cgi-bin。这在第二个示例中也发生,但由于您提供了完整路径,Apache 会找到它。尝试在cgi-bin之前删除/,问题应该会自行解决。

最新更新