【问题标题】:How can I run extensionless CGI script from apache ROOT?如何从 apache ROOT 运行无扩展 CGI 脚本?
【发布时间】:2019-08-23 03:56:48
【问题描述】:

我正在使用 CGI 脚本设置一个 apache 网络服务器(在 Ubuntu 18.04 上),但我想要一个没有“cgi”的干净 URL。

我已经有一个正常运行的脚本(在 Perl 中),出于这个问题的目的,我将调用它 myscript

1。 localhost/cgi-bin/myscript(工作)

如果我将脚本放在 /usr/lib/cgi-bin/myscript 中,它可以与 URL localhost/cgi-bin/myscript 一起使用。

2。 localhost/myscript.cgi(工作)

或者,我可以重新配置 /var/www/ 以将扩展名为 .cgi 或 .pl 的文件作为 CGI 运行:

 <Directory /var/www/>
     Options Indexes FollowSymLinks
     AllowOverride None
     Require all granted
+    Options +ExecCGI
+    AddHandler cgi-script .cgi .pl
 </Directory>

这可行如果我添加一个 .cgi 扩展名:myscript.cgi。然后 URL localhost/myscript.cgi 工作。

3。 localhost/myscript???

但我不想在我的网址中出现cgi。我只想让localhost/myscript 以 CGI 的形式运行myscript。 (而且我不想强制 ROOT 中的其他文件为 CGI)。

这可能吗?

【问题讨论】:

    标签: apache configuration cgi


    【解决方案1】:

    你不能直接这样做。但是,您可以 Redirect 请求特定的无扩展名 URL 到其对应的 .cgi。

    您可以使用.htaccess 文件测试这些,以避免重新加载服务器。

    在您的&lt;VirtualHost ...&gt; 部分:

    <Directory /your/web/dir/>
      Require all granted
      AllowOverride All
    </Directory>
    

    /your/web/dir/.htaccess

    Options +ExecCGI
    AddHandler cgi-script .cgi
    Redirect  "/test" /test.cgi
    # or
    # RedirectMatch  "^/(test)$" /$1.cgi
    

    另一种可能性是使用mod_rewrite,并将对任何现有可执行文件的调用重定向到同名但扩展名为.cgi 的文件。无扩展名文件只能存在,可以为空。

    /your/web/dir/.htaccess

    Options +ExecCGI
    AddHandler cgi-script .cgi
    
    RewriteEngine On
    # If not already .cgi and executable, redirect to .cgi
    RewriteCond /your/web/dir/%{REQUEST_URI} "!\.cgi$"
    RewriteCond /your/web/dir/%{REQUEST_URI} -x
    RewriteRule ^(.+) /$1.cgi [R]
    

    当然,您可以使用 .cgi 以外的任何其他扩展名。例如.x,如果你设置了AddHandler cgi-script .x

    【讨论】:

      猜你喜欢
      • 2014-09-16
      • 1970-01-01
      • 2010-10-08
      • 2016-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多