我正在使用CGI脚本设置一个Apache Web服务器(在Ubuntu 18.04上),但是我想要一个干净的URL,其中不含“ cgi”。
我已经有一个运行正常的脚本(在Perl中),出于这个问题的目的,我将其称为 myscript
。
localhost/cgi-bin/myscript
(有效)如果我将脚本放在/usr/lib/cgi-bin/myscript
中,它将与URL localhost/cgi-bin/myscript
一起使用。
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
起作用。
localhost/myscript
??? 但我不想在我的URL中使用cgi
。我只希望localhost/myscript
作为CGI运行myscript
。 (而且我不想将ROOT中的其他文件强制为CGI。)
这可能吗?
答案 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
。