当我使用根目录

时间:2017-11-09 19:56:59

标签: apache perl cgi

我正在使用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。

此外,如果我更改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

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

2 个答案:

答案 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之前的/,问题应该自行解决。