隐藏cgi网站的所有.cgi扩展名方法

在Perl/CGI创建的网站中,实现不显示.cgi扩展名的URL(如BlockDetail?而不是BlockDetail.cgi?),有几种常见方法:

方法1:Apache URL重写(推荐)

在网站根目录创建或修改.htaccess文件:

apache

RewriteEngine On

# 隐藏.cgi扩展名
RewriteRule ^cgi-bin/mousePortal/BlockDetail$ /cgi-bin/mousePortal/BlockDetail.cgi [L]
RewriteRule ^cgi-bin/mousePortal/BlockDetail\?(.*)$ /cgi-bin/mousePortal/BlockDetail.cgi?$1 [L]

# 或者更通用的规则 - 隐藏所有.cgi扩展名
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.cgi -f
RewriteRule ^(.+)$ $1.cgi [L]

完整的.htaccess示例

apache

Options +ExecCGI +FollowSymLinks
RewriteEngine On

# 隐藏cgi-bin路径和.cgi扩展名
RewriteRule ^mousePortal/BlockDetail$ cgi-bin/mousePortal/BlockDetail.cgi [L]
RewriteRule ^mousePortal/BlockDetail\?(.*)$ cgi-bin/mousePortal/BlockDetail.cgi?$1 [L]

# 设置CGI文件处理
AddHandler cgi-script .cgi

# 确保CGI文件可执行
<Files "*.cgi">
SetHandler cgi-script
</Files>

服务器配置建议

在Apache主配置文件中确保:

apache

<VirtualHost *:443>
ServerName www.varnatech.cn
DocumentRoot /var/www/html

# CGI配置
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews
Require all granted
</Directory>

# URL重写配置
<Directory "/var/www/html">
Options +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

这样配置后,用户访问https://www.varnatech.cn/cgi-bin/mousePortal/BlockDetail?bk=pahbalA097时,实际执行的是BlockDetail.cgi脚本,但URL中不会显示.cgi扩展名。

选择方法1(URL重写)是最常用和最灵活的方式。