我需要能够从URL中提取方案,主机和端口。
因此,如果浏览器中的我的网址是:http://www.example.com:80/something.pl
我需要能够获得:http://www.example.com:80
答案 0 :(得分:9)
URI模块可以帮助您以任何方式切片和切块URI。
如果您尝试在CGI脚本中执行此操作,则需要查看$ENV{SERVER_NAME}
和$ENV{SERVER_PORT}
。
使用您正在使用的CGI模块的url
方法(例如CGI.pm或CGI::Simple)会使事情变得更加直截了当。
答案 1 :(得分:6)
我让URI模块弄清楚了,所以我不必创建新的错误:
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;
答案 2 :(得分:3)
使用modperl,它位于Apache2::RequestRec对象中,使用uri
或unparsed_uri
。
您无法从此处获取输入用户浏览器的确切文本,只能将其显示给服务器。
服务器名称(虚拟主机)位于Server对象中。
答案 3 :(得分:-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";
}