2010-02-25 65 views

回答

9

URI模块可以帮助您切片和切块一个URI任何你想要哪种方式。

如果您尝试在CGI脚本中执行此操作,您需要查看$ENV{SERVER_NAME}$ENV{SERVER_PORT}

使用正在使用的CGI模块(例如CGI.pmCGI::Simple)的url方法使事情更加简单。

-5
sub cgi_hostname { 
    my $h = $ENV{HTTP_HOST} || $ENV{SERVER_NAME} || 'localhost'; 
    my $dp =$ENV{HTTPS} ? 443 : 80; 
    my $ds =$ENV{HTTPS} ? "s" : ""; 
    my $p = $ENV{SERVER_PORT} || $dp; 
    $h .= ":$p" if ($h !~ /:\d+$/ && $p != $dp); 
    return "http$ds\://$h"; 
} 
+9

@goe看来你选择了这个答案,因为你不想使用'CGI.pm'或'CGI :: Simple'。我不关心你选择了哪个答案,但是从长远来看,没有为你的CGI脚本使用一个完善的模块会花费你的成本。 – 2010-02-25 21:09:19

3

随着modperl,它在Apache2::RequestRec对象,即使用uri,或unparsed_uri

您无法从中获取输入到用户浏览器中的确切文本,只能获取呈现给服务器的内容。

服务器名称(虚拟主机)位于服务器对象中。

6

我让URI模块数字出来,所以我没有创建新的bug:

use 5.010; 
use URI; 

my $url = 'http://www.example.com:80/something.pl'; 

my $uri = URI->new($url); 

say $uri->scheme; 
say $uri->host; 
say $uri->port; 
相关问题