我正在使用VirtualHost
来处理/var/www/project/src
中文件的请求。
我还有/var/www/project/src/cgi-bin/index.pl
中的Perl脚本(CGI二进制文件)。
以下是与我的问题相关的指令部分:
<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.pl
CGI的权限-bin。
此外,如果我更改DocumentRoot
和Directory
变量中的路径,则以下配置有效:
<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
?
注意:...
中的项似乎与问题无关 - 无论是删除它们,更改它们还是保留它们,错误和日志消息在任何情况下都是相同的 - 所以我要离开它们为了简洁起见。
答案 0 :(得分:0)
尝试更改/ var / www,/ var / www / project,/ var / www / project / src和/或/ var / www / project / src / cgi-bin
的权限更新:此外,不要忘记在进行更改后重新启动Apache服务器。
答案 1 :(得分:0)
正在发生的事情是<罢工>你的过度热情在你的热情中过度......在第一个例子中,DirectoryIndex /cgi-bin/index.pl
指向你的ROOT目录,然后搜索文件夹来电者{{1} }。这也发生在第二个例子中,但是既然你给出了完整的路径,Apache就会找到它。尝试删除cgi-bin
之前的/
,问题应该自行解决。