2010-02-25 19 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; 
相關問題