【问题标题】:Pretty URL for Perl CGIPerl CGI 的漂亮 URL
【发布时间】:2018-10-05 05:20:21
【问题描述】:

我刚刚从使用 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,这根本不起作用,而且看起来也很糟糕。我已经用.htaccessserve-cgi-bin.conf 尝试了所有我能想到的东西,但对我来说没有任何效果。只要文件夹名称和扩展名不出现在 url 中,我需要将 api.pl 放入哪个文件夹并不重要。

我怎样才能得到想要的网址?

【问题讨论】:

  • 您决定从作为 CGI 的 PHP 转向作为 CGI 的 Perl,这是更古老的技术,有什么原因吗? Perl 的 CGI 模块已被弃用并从当前 Perl 版本的核心安装中删除。除非您在不允许您打开端口的共享主机环境中,否则我建议您使用 Perl 研究一个更现代的基于 Plack 的解决方案。想到 Dancer2 或 Mojolicious。

标签: apache .htaccess perl cgi


【解决方案1】:

您只需要将规则中的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 之类的工具来测试您的规则。

【讨论】:

  • 如果可行,我就不会在这里发帖了 :) 那是我尝试的第一件事。它重定向到example.com/usr/lib/cgi-bin/api.pl
  • 那么你的服务器配置不正确@derek。
  • 你是对的。重新安装apache解决了它。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多