是否可以编写单个perl cgi脚本来满足所有http请求

|| 我想知道是否有可能使用单个perl cgi脚本来处理所有对我网站的http请求,而不管访问者给出的相对URL是什么。 请分享您的想法。非常感谢。     
已邀请:
根据提交者的请求,我正在提交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;
}
您很可能希望解析用于执行此脚本为每个HTTP请求执行的各种不同功能的URL,而不是显示\“ Relative URL was \\”的简单行。     
如果调用脚本
index.cgi
并将其与
mod_rewrite
规则组合以将所有请求重定向到
/index.cgi/foo
,那么
foo
将以
$ENV{\'PATH_INFO\'}
的形式提供,从而使您知道原始请求路径是什么。     
正如其他人所说,使用mod_rewrite是很有可能的。但是您可能不想在CGI程序中这样做。最好使用Catalyst或Dancer(可能在后端使用Plack)编写适当的Web应用程序。     
如果您不是真的致力于现有的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服务器运行的现有程序中摘录了该片段。不确定在第一个命令之后需要多少个“ use”命令,但是希望可以给您一些想法。     
您无法自行设置perl来执行此操作。但是,您应该能够将Web服务器配置为将所有请求重定向到单个CGI脚本,通常然后将完整脚本作为参数传递。如果您在Apache上运行,请查看
mod-rewrite
。     
信誉欠佳,无法对davorg发表任何评论(我是新来的)。 您也可以使用Mojolicious框架。 Mojolicious :: Lite允许您在单个文件(逻辑文件,模板文件等)中编写完整的应用程序,我想您正在搜索类似的内容: http://search.cpan.org/perldoc?Mojolicious::Lite#Wildcard_Placeholders 有关更多信息,请访问: http://mojolicio.us/     

要回复问题请先登录注册