Apache suexec "Command not in Docroot"



错误消息为:

command not in docroot (/home/site1/cgi-bin/test.pl).

在这里我找到了这个:

suexec 要求 CGI 脚本位于服务器的 DocumentRoot 下(而不是 VirtualHost DocumentRoot)。但是,允许 VirtualHost DocumentRoot 成为指向实际 DocumentRoot 下显示的目录的符号链接。

虚拟主机配置的一部分是:

[...]
DirectoryIndex index.html index.html index.php
DocumentRoot /home/site1/htdocs
SuexecUserGroup site1 site1
ScriptAlias /cgi-bin/ /home/site1/cgi-bin/
<Location /home/site1/cgi-bin>
           Options +ExecCGI
</Location>
<Directory /home/site1/>
Options -Includes -Indexes -FollowSymLinks +ExecCGI MultiViews
AddHandler cgi-script .cgi .pl
AllowOverride none
Order allow,deny
Allow from all
</Directory>
[...]

所以,我更喜欢在cgi-bin中使用Perl脚本,但是如果我无法解决此问题,我可以将所有脚本移动到htdocs。

suEXEC有自己的docroot,完全独立于你在Apache配置中配置的任何内容。你可以通过调用来查看suEXEC的docroot是什么:

suexec -V

你可能需要为此加根。就我而言,文档根是/var/www.你必须把你的脚本放在那里。无法更改此保存重新编译suEXEC。不要尝试使用符号链接将脚本保留在/var/www(或任何suEXEC配置的内容)之外。

编辑:正如@insaner在评论中提到的,该命令可能suexec,或者正如我在至少一个服务器suexec2上看到的那样。 suEXEC就是Apache文档所说的模块/功能。

如果您

使用的是软件包,则/etc/apache2/suexec/www-data中有一个配置,前 2 行如下apache2-suexec-custom

/var/www
public_html/cgi-bin

您需要将这些行替换为您的设置。应该有 2 行。只给出一行会通过错误。

我使用了如下所示的东西,

home
cgi-bin
将 DocumentRoot

/home/site1/htdocs更改为 DocumentRoot /home/site1/

相关内容

  • 没有找到相关文章

最新更新