虽然与配置apache
和perl cgi scripts
,不知道为什么index.cgi
/ index.pl
显示为纯文本,而不是执行它们。 当我把http://localhost
的浏览器,它显示下面的代码,而不是执行它。
List item
#!C:/Dwimperl/perl/bin/perl.exe -w
print "Content-type: text/html\n\n";
print <<HTML;
<html>
<head>
<title>A perl web page</title>
</head>
<body>
<h3>A hello world form perl</h3>
</body>
HTML
exit;
这是部分httpd.conf
我所编辑的大部分时间文件(阅读各种在线参考后,教程)
# This should be changed to whatever you set DocumentRoot to.
<Directory "D:\webserver">
Listen 80
ServerName localhost:80
LoadModule cgi_module modules/mod_cgi.so
# First, we configure the "default" to be a very restrictive set of
# features.
<Directory />
Options FollowSymLinks +ExecCGI
AllowOverride None
</Directory>
DirectoryIndex index.html index.html.var index.cgi index.pl
AccessFileName .htaccess
# To use CGI scripts outside of ScriptAliased directories:
# (You will also need to add "ExecCGI" to the "Options" directive.)
#
#AddHandler cgi-script .cgi .pl
ScriptAlias /cgi-bin/ "C:/Apache/Apache2/cgi-bin/"
当浏览器打印的脚本代码,这意味着它无法找到运行脚本的应用程序。 下面两行应该解决这个你人生的第一步。 AddHandler的将与结尾确保文件.cgi
和.pl
被视为CGI脚本。 而+ExecCGI
选项将允许执行脚本。 另外,还要确保你的脚本指向正确的perl程序的位置。
AddHandler cgi-script .cgi .pl Options FollowSymLinks +ExecCGI
也有一些错误/错误配置点在httpd.conf
- 别名线应该指向你的CGI脚本存在cgi-bin目录。
的ScriptAlias / cgi-bin目录/ “d:\ web服务器\的cgi-bin”
- 对于相同的cgi-bin目录下面的配置应该在
httpd.conf
。 你应该更换你<Directory "D:\webserver">
下面的部分。
<Directory "D:\webserver\cgi-bin" /> AddHandler cgi-script .cgi .pl Options FollowSymLinks +ExecCGI AllowOverride None </Directory>
- 尝试从命令行运行CGI脚本像下面。 它应打印或在命令行先运行。
perl的test.cgi
- 请确保您有读写递归权限
cgi-bin
目录和CGI脚本。 ,你也可以创建目录或写权限的文件。 如果没有创建一个cgi-bin
,在那里你可以有写权限,并提供更确切地说,它的路径在其他一些地方目录alias
和directory
的属性httpd.conf
来代替。 - 检查Apache的错误日志中确切的错误消息,在每次遇到的apache的conf问题的时间。 它会给你善于洞察问题。
另外这个链接应该帮助你。
( 附加注释,而不是原来的回答者 :您可能还需要启用cgi
。模块对我来说,让CGI的最后一步上一个新的工作,安装Apache 2的是sudo a2enmod cgi
我做之前,该网站。简单地给我看剧本的内容。)
sudo a2enmod cgi
目录/位置/文件不具有与其关联的正确处理,或者不具有ExecCGI
启用选项。 见阿帕奇教程:使用CGI动态内容 。
改变Apache的新版本:选项+的FollowSymLinks + ExecCGI
在Mac OS X 10.8
我不得不这样做
<Directory />
Options FollowSymLinks +ExecCGI
AllowOverride None
</Directory>
和
去掉这一
#AddHandler cgi-script .cgi .pl
# use types www.site.com/visible-in-url
# Apache serves /var/path/to/dir
ScriptAlias /visible-in-url/ /var/path/to/dir/
# Note the order of the aliases matters - first cgi than static content
# Note this dir is a symlink pointing to the desirable directory
<Directory "/var/path/to/dir">
AddHandler cgi-script .cgi .pl
AllowOverride Indexes
Options +ExecCGI +MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
<Files ~ "\.(pl|cgi)$">
SetHandler perl-script
PerlResponseHandler ModPerl::PerlRun
Options +ExecCGI +SymLinksIfOwnerMatch
PerlSendHeader On
</Files>
当浏览器打印的脚本代码,这意味着它无法找到运行脚本的应用程序。
随着Apache 2.4
(OSX上的优山美地,10.10.5),如果我用了错误的路径的shebang行,我的浏览器显示:
内部服务器错误
但即使有一个有效的shebang行,我不能让我的CGI程序通过遵循公认的答案的建议执行 - 阿帕奇只是担任了节目的文字我的浏览器。 一些试验后,我发现我需要让我的唯一变化/usr/local/apache2/conf/httpd.conf
文件取消注释行:
LoadModule cgid_module modules/mod_cgid.so
我的CGI程序具有扩展名特等,的.py和.RB取决于我用什么语言编程(和Apache的cgi-bin目录中,有没有扩展测试CGI脚本),他们都执行,而不必指定在httpd.conf文件中的任何地方有效的扩展。 我默认httpd.conf
文件只有以下相关线路:
<IfModule alias_module>
#Lots of comments here
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
</IfModule>
...
...
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options None
Require all granted
</Directory>
我使用的家当线,这取决于语言我的CGI程序写入:
#!/usr/bin/env perl
要么:
#!/usr/bin/env python
要么:
#!/usr/bin/env ruby
CGI程序必须是可执行文件为好,否则你会得到一个内部服务器错误:
$ chmod a+x myprog.pl
a+x
=>所有+可执行文件。 换句话说,可执行许可添加到每个所有者,组,其他的。
并且,在最低限度的CGI程序具有以产生Content-Type header
输出的响应的主体之前:
print "Content-Type: text/html\n\n";
print "<h1>Hello, World.</h1>";
(顺便说一句,这确切的代码将在Perl,Python和红宝石或工作)。否则,再次你会得到一个内部服务器错误。
URL来执行CGI脚本:
http://localhost:8080/cgi-bin/myprog.pl
这是我安装了Apache:
~/Downloads$ tar xvfz httpd-2.4.18.tar.bz2
...
...
~/Downloads$ cd httpd-2.4.18
...
...
~/Downloads/httpd-2.4.18$ ./configure --help
...
...
--enable-so DSO capability. This module will be automatically
enabled unless you build all modules statically.
...
...
我不知道这意味着什么的挫折感,但PHP文档说与该选项安装Apache,所以我继续这样做:
~/Downloads/httpd-2.4.18$ ./configure --enable-so
...
...
~/Downloads/httpd-2.4.18$ make
...
...
~/Downloads/httpd-2.4.18$ sudo make install
Apache的DSO文档在这里 。