2012-07-24 70 views
0

如果URL如下:PHP URL目錄

如果:http://www.imvu-e.com/products/dnr/
然後:http://www.imvu-e.com/products/dnr/

如果:http://www.imvu-e.com/products/dnr/?
然後:http://www.imvu-e.com/products/dnr/

如果:http://www.imvu-e.com/products/dnr/index.php
然後:http://www.imvu-e.com/products/dnr/

如果:http://www.imvu-e.com/products/dnr/page.php?var=2
然後:http://www.imvu-e.com/products/dnr/

如果:http://www.imvu-e.com/products/dnr
然後:http://www.imvu-e.com/products/

我怎樣才能做到這一點?

我嘗試:

print "http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['REQUEST_URI'])."/"; 

回答

1

看一看parse_url()函數。

它返回任何你需要的東西。

只需print_r()parse_url的結果即可查看返回的結果。 你可能想是這樣的:

$ARRurlParts = parse_url($orgurl); 

$newURL = $ARRelem["scheme"]. 
"://".$ARRelem["host"]. 
((isset($ARRelem["port"]))?":".$ARRelem["port"]:""). 
$ARRelem["path"]; 
-1

可以剝離一切從最後一個反斜槓直到字符串的結尾。我很確定dirname($_SERVER['REQUEST_URI'])不會完成這項工作。您也可以嘗試使用dirname($_SERVER['SCRIPT_FILENAME'])。如果你沒有一些奇特的.htaccess重寫規則,最後一個工作。

+0

我確定你的意思是「斜槓」而不是「反斜槓」。 – 2012-07-24 08:16:13

+0

/- 這種斜線:) – 2012-07-24 08:18:00

+0

是的,這是「正斜槓」或者乾脆「斜線」 – 2012-07-24 08:18:19

1

您的「嘗試」問題是$ _SERVER ['REQUEST_URI']將包含用戶傳遞的所有內容,包括index.php和問號以及可能更多。爲了得到你是什麼之後,你需要解析$_SERVER['REQUEST_URI']

  • 如果以斜線/結束,離開它,因爲它是
  • 否則,查找字符串中的最後一個斜線,走從一開始直到幷包括該斜線
  • 子最後追加結果到http://(或https://與域名)
1

結束了與此

$s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; 
$protocol = substr(strtolower($_SERVER["SERVER_PROTOCOL"]), 0, strpos(strtolower($_SERVER["SERVER_PROTOCOL"]), "/")) . $s; 
$port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]); 
$address = $protocol . "://" . $_SERVER['SERVER_NAME'] . $port . $_SERVER['REQUEST_URI']; 
$parseUrl = parse_url(trim($address)); 
$parent = (substr($parseUrl['path'], -1) == '/') ? $parseUrl['path'] : dirname($parseUrl['path']) . "/"; 
return $parseUrl['scheme'] . '://' . $parseUrl['host'] . $parseUrl['port'] . $parent; 

由歐文穆勒的回答部分的啓發(爲什麼我投它),snipplets整個網絡去。