我刚刚使用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是脚本名称)执行,按预期工作。
切换到Perl,访问http://example.com/api
重定向到http://example.com/usr/lib/cgi-bin/api.pl
,但这看起来并不起作用,而且看起来很可怕。我已经尝试了.htaccess
和serve-cgi-bin.conf
所能想到的一切,但对我来说没有任何作用。只要文件夹名称和扩展名没有出现在网址中,我需要将api.pl
放入哪个文件夹并不重要。
如何获得所需的网址?
答案 0 :(得分:3)
您只需要在规则中将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之类的工具来测试您的规则。