apache - 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 尝试了所有我能想到的东西.htaccess
,serve-cgi-bin.conf
但对我来说没有任何效果。api.pl
只要文件夹名称和扩展名不出现在 url 中,我需要放入哪个文件夹并不重要。
如何获得所需的网址?
解决方案
您只需要在规则中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 之类的工具来测试您的规则。
推荐阅读
- google-cloud-platform - 为什么启用 Cloud Run API 会创建这么多服务帐号?为什么他们有这么多特权?
- javascript - JQuery 中的计算给出结果“NaN”
- ios - 应用程序不要求照片库使用权限
- c++ - 尝试在树莓派上构建 Qt 项目,为什么会抛出关于 qmake 的错误?
- javascript - 为什么 Google Maps API 的实际地图没有显示在页面上?
- c++ - 如何将文件中的值放入数组
- java - 如何在一定时间后终止进程?
- c# - 获取 Microsoft Graph API 日历发布的 URL
- haskell - Intero 总是安装隔离的 GHC
- ruby-on-rails - 身份验证后无法在 sidekiq-cron UI 中执行 Enqueue