Perl的Apache:Perl脚本显示为纯文本(Perl Apache : Perl script

2019-07-19 16:02发布

虽然与配置apacheperl 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/"

Answer 1:

当浏览器打印的脚本代码,这意味着它无法找到运行脚本的应用程序。 下面两行应该解决这个你人生的第一步。 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 ,在那里你可以有写权限,并提供更确切地说,它的路径在其他一些地方目录aliasdirectory的属性httpd.conf来代替。
  • 检查Apache的错误日志中确切的错误消息,在每次遇到的apache的conf问题的时间。 它会给你善于洞察问题。

另外这个链接应该帮助你。

附加注释,而不是原来的回答者 :您可能还需要启用cgi 。模块对我来说,让CGI的最后一步上一个新的工作,安装Apache 2的是sudo a2enmod cgi我做之前,该网站。简单地给我看剧本的内容。)

sudo a2enmod cgi



Answer 2:

目录/位置/文件不具有与其关联的正确处理,或者不具有ExecCGI启用选项。 见阿帕奇教程:使用CGI动态内容 。



Answer 3:

改变Apache的新版本:选项+的FollowSymLinks + ExecCGI



Answer 4:

在Mac OS X 10.8

我不得不这样做

<Directory />
    Options FollowSymLinks +ExecCGI
    AllowOverride None
</Directory>

去掉这一

#AddHandler cgi-script .cgi .pl


Answer 5:

 # 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>


Answer 6:

当浏览器打印的脚本代码,这意味着它无法找到运行脚本的应用程序。

随着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文档在这里 。



文章来源: Perl Apache : Perl script displayed as plain text