我在服务器 cgi-bin 目录(/usr/lib/cgi-bin)上有一个 perl 形式的电子邮件脚本。
/etc/apache2/sites-enabled/000-默认
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script cgi pl
Order allow,deny
Allow from all
</Directory>
问题出在路径上。
html 在这里调用脚本:
<form name="Request" method="post" action="http://server-test.local/cgi-bin/formprocessorpro.pl" onsubmit="return checkWholeForm49874(this)">
包含模板和配置的目录传递到这里:
<input type="hidden" name="base_path" value="../contact" />
该表单的路径为:
http://server-test.local/formstest/contact.htm
无论我尝试对 base_path 进行何种变化,我都会从 formprocessor 脚本中收到错误,提示它找不到目录:
An error occurred when opening the Form Configuration File (../contact/form.cfg): No such file or directory.
我需要将此脚本从由以前的系统管理员配置的旧服务器移动到新服务器。
由于 cgi-bin 自动链接到 /usr/lib/cgi-bin 并且链接使得脚本驻留:
http://server-test.local/cgi-bin/formprocessorpro.pl
我可以想象,鉴于模板位于 webroot 中名为 contact 的目录中,正确的路径应该是:
../contact
有什么想法吗?我已经有一段时间没玩过 CGI 了。
* 更新 * 如果我将模板放在实际的 cgi-bin 目录中或附近,它就会起作用。Debian 将 cgi-bin 符号链接到 /usr/lib/cgi-bin,显然表单邮件脚本并未获知这一点。如果此解决方案适合您,欢迎保持沉默,否则,请批评我并提出其他策略。谢谢!
* 更新第 2 部分 * 如果 /var/www/,则传递的路径有效。CGI 脚本不应该能够跟踪 apache 的 conf 文件中的链接吗?
布布诺夫
答案1
CGI 的工作目录是它所在的目录。CGI 中的“base_path”可能通过文件系统访问文件,而不是通过任何网络服务器。
您从未提及它需要打开的文件实际上位于何处,因此很难告诉您合适的相对路径是什么。