通过链接在浏览器中运行 perl 脚本

通过链接在浏览器中运行 perl 脚本

我正在尝试在 Oracle Linux 8.5 上启动并运行 perl 脚本。

我的 Apache 服务器和虚拟主机使用静态 html 工作。

我的测试虚拟主机 fnu 在 /var/www/fnu 中有一个名为 hw.pl 的非常基本的 perl 脚本:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World. This is fnu.";

index.html我有一个从到 的链接hw.pl,权限打开且所有者设置为apache

-rwxrwxrwx. 1 apache apache 89 Jun  4 20:59 hw.pl
lrwxrwxrwx. 1 apache apache  5 Jun  4 20:59 index.html -> hw.pl

以下是站点配置/etc/httpd/conf.d

<VirtualHost *:80> 
DocumentRoot "/var/www/fnu/"
ServerName fnu.[obscured].net
ServerAlias fnu
ErrorLog /var/log/fnu/error.log
CustomLog /var/log/fnu/request.log combined
<\/VirtualHost>

<Directory "/var/www/fnu">
    Options +ExecCGI +SymLinksIfOwnerMatch
    AddHandler cgi-script .cgi .pl
<\/Directory>

如果我将浏览器指向fnu/hw.pl,我会得到我期望的结果 - 脚本输出。如果我将浏览器指向fnu/,我会得到文件的内容。因此,它会跟踪链接,但到达那里后不会将其作为 perl 脚本运行。 中没有任何有用的东西/var/log/fnu/error.log

SELinux 设置为 Permissive。

我非常感谢您的帮助。

脚本输出符合预期

脚本文件内容

答案1

它将 index.html 读取为 html 文件。

纠正此问题的一种方法是告诉 apache 将 .phtml 文件作为 perl 执行。

要做到这一点,你需要找到:

<IfModule dir_module>
     DirectoryIndex index.html index.phtml index.php
</IfModule>

在您的 httpd 配置中并将 index.phtml 添加到DirectoryIndex列表中,如上所示。

然后您需要AddHandler cgi-script .phtml将您的链接重命名为index.phtml。

应该可以工作,但是我已经很多年没有在 apache 中使用过 cgi 了。

另一种方法是使用星海 (服务器端包含)mod_include. 你可以用这个创建一个 index.html 和<!--#include virtual="/path/to/hw.pl" -->OR<!--#exec cmd="hw.pl" -->

我不记得哪个更好,但根据你的脚本的作用,你可以阅读文档并找出最佳方法。

答案2

谢谢,我找到了另一种资源,并能够使用SetHandler配置而不是 来解决这个AddHandler问题。我意识到在某些情况下这可能是一个过于宽泛的解决方案,但它在这里实现了我想要的效果。

<Directory "/var/www/fnu">
    SetHandler cgi-script
    Options +ExecCGI +SymLinksIfOwnerMatch
<\/Directory>

当我浏览到时,脚本现在运行fnu/

相关内容