如何从apache ROOT运行无扩展CGI脚本?

时间:2019-04-01 22:16:41

标签: apache configuration cgi

我正在使用CGI脚本设置一个Apache Web服务器(在Ubuntu 18.04上),但是我想要一个干净的URL,其中不含“ cgi”。

我已经有一个运行正常的脚本(在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扩展名运行文件:

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

这有效。如果,我添加了.cgi扩展名:myscript.cgi。然后网址localhost/myscript.cgi起作用。

3。 localhost/myscript ???

但我不想在我的URL中使用cgi。我只希望localhost/myscript作为CGI运行myscript。 (而且我不想将ROOT中的其他文件强制为CGI。)

这可能吗?

1 个答案:

答案 0 :(得分:0)

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

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

在您的<VirtualHost ...>部分:

<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