首页 > 解决方案 > Perl CGI 的漂亮 URL

问题描述

我刚刚从使用 PHP 转换为 Perl,用于托管 API 命令的脚本。

作为 php,.htaccess 看起来像:

RewriteRule ^api/?$ api.php [L]
RewriteRule ^api/?([a-zA-Z0-9_-]{1,})?/?$ api.php?command=$1 [QSA,L]
RewriteRule ^api/?([a-zA-Z0-9_-]{1,})?/?([a-zA-Z0-9_-]{1,})?/?$ api.php?command=$1&key=$2 [QSA,L]

最终结果是使用类似http://example.com/api/command/key(其中 api 是脚本名称)的 url 执行,按预期工作。

切换到 Perl,访问http://example.com/api重定向到http://example.com/usr/lib/cgi-bin/api.pl其中一点都不起作用,而且看起来也很可怕。我已经用 and 尝试了所有我能想到的东西.htaccessserve-cgi-bin.conf但对我来说没有任何效果。api.pl只要文件夹名称和扩展名不出现在 url 中,我需要放入哪个文件夹并不重要。

如何获得所需的网址?

标签: apache.htaccessperlcgi

解决方案


您只需要在规则中api.php替换为。cgi-bin/api.pl

RewriteRule ^api/?$ cgi-bin/api.pl [L]
RewriteRule ^api/?([a-zA-Z0-9_-]{1,})?/?$ cgi-bin/api.pl?command=$1 [QSA,L]
RewriteRule ^api/?([a-zA-Z0-9_-]{1,})?/?([a-zA-Z0-9_-]{1,})?/?$ cgi-bin/api.pl?command=$1&key=$2 [QSA,L]

您可以使用htaccess.madewithlove.be 之类的工具来测试您的规则。


推荐阅读