1

我有一台安装了 apache 的 ubuntu 机器。我想使用网页通过 cgi 运行一些简单的 shell 脚本,然后回到我的主屏幕。我还希望自动返回步骤。我在我的 apache.conf 中设置了一个重定向,它工作正常,但脚本根本没有运行。

有没有办法运行脚本然后才应用重定向?

评论:
我认为可能是答案,但我不确定。

4

2 回答 2

1

你不能让你的cgi脚本输出这样的东西吗?

<META HTTP-EQUIV=Refresh CONTENT="0; URL=http://www.your-home-page.com/">
于 2012-06-17T09:30:22.707 回答
1

我猜您的 apache 在执行之前会将访问重定向到您的 cgi 脚本。

您将需要在您的 cgi 脚本中进行重定向。有两种可能的方式:

  1. 如您链接的示例中所示,输出带有元重定向的简单 html 页面。这将告诉浏览器加载新站点。
  2. 让您编写脚本输出一个 http 重定向标头。这也将告诉网络浏览器加载新站点。这是 perl 中的一个示例:

    #!/usr/bin/perl
    use CGI;
    my $c = CGI->new();
    
    print $c->redirect("http://yoursite");
    

    如果您在控制台调用此脚本,它将输出以下内容:

    Status: 302 Found
    Location: http://yoursite
    

使用 perl CGI 模块之类的帮助模块最容易生成此标头。但是你也可以直接打印出上面的行。

如果您想从网页调用 shell 脚本,您也可以使用服务器端包含,或者如果您使用例如 php,则使用system()exec()从您的 php 页面调用您的脚本。

最后提醒一句:通过 cgi 或 php 中的系统调用从 apache 执行脚本并不是一个非常优雅的解决方案,原因如下

  • 安全性:用户可能能够让脚本做你不想要的事情(寻找“命令注入”)
  • 性能:您的 linux 系统将在每次 cgi 或系统调用时创建一个新进程。在加载的站点上,这可能会导致性能下降。

在不知道您要解决的问题的情况下,很难给出更详细的建议。如果您想要某种形式的用户身份验证,请查找 htaccess-mechanism。否则,编写一个 php 脚本,它在被浏览器调用时执行所有处理,完成后也可能重定向到另一个页面。

于 2012-06-17T09:12:31.007 回答