我想知道是否可以使用单个perl cgi脚本来为我的网站提供所有http请求,无论访问者提供什么相对URL。
请分享您的想法。非常感谢。
答案 0 :(得分:4)
如果您调用脚本index.cgi
并将其与mod_rewrite
规则相结合,将所有请求重定向到/index.cgi/foo
,那么foo
将以$ENV{'PATH_INFO'}
的形式提供,从而让您知道原始请求路径是什么。
答案 1 :(得分:3)
答案 2 :(得分:3)
如果您没有真正致力于现有的Web服务器,可以使用以下内容:
use HTTP::Daemon; # need LWP-5.32 or better
use HTTP::Status;
use HTTP::Response;
use URI::Heuristic;
my $server = HTTP::Daemon->new(LocalPort => 89);
my $this_url = $server->url;
等
我从现有程序中抓取了该片段,该程序作为自己的Web服务器运行。不确定在第一个命令之后需要多少“使用”命令,但希望这会给你一些想法。
答案 3 :(得分:1)
您无法设置perl本身来执行此操作。但是,您应该能够将Web服务器配置为将所有请求重定向到单个CGI脚本,通常然后将完整脚本作为参数传递。如果您在Apache上运行,请查看mod-rewrite
。
答案 4 :(得分:1)
根据提交者的要求,我正在提交更完整版的HTTPD脚本:
#!/usr/bin/perl
use strict;
use warnings;
use HTTP::Daemon;
my $PORT = 89;
my $server = HTTP::Daemon->new(LocalPort =>$PORT);
# Init
print "Starting server at $server->url\n";
print "You can also use http://localhost:$PORT if browsing from the same machine running this script.\n\n";
# Server
my $count=0;
while (my $client = $server->accept) {
CONNECTION:
while (my $request = $client->get_request) {
$count++;
print "Connection #$count:\n";
print $request->as_string;
print "\n";
$client->autoflush;
RESPONSE:
print $client "Relative URL used was " . $request->url->path;
last CONNECTION;
}
$client->close;
undef $client;
}
而不是打印“使用相对URL的是”的简单行,您很可能想要解析用于执行此脚本为每个HTTP请求执行的任何不同功能的URL。
答案 5 :(得分:0)
不能通过低声誉对davorg发表评论(我是新来的)。
您也可以使用Mojolicious框架。 Mojolicious :: Lite允许您在单个文件中编写完整的应用程序(逻辑,模板等),我猜您正在搜索类似的内容:
http://search.cpan.org/perldoc?Mojolicious::Lite#Wildcard_Placeholders
更多信息: