0

如果 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'])."/";
4

4 回答 4

1

您的“尝试”的问题是 $_SERVER['REQUEST_URI'] 将包含用户传递的所有内容,包括 index.php 和问号,可能还有更多。为了得到你所追求的,你需要解析$_SERVER['REQUEST_URI']

  • 如果它以斜线结尾/,请保持原样
  • 否则,找到字符串中的最后一个斜杠,并将子字符串从头到尾取到并包括这个斜杠
  • 最后将结果附加到http://(或https://带有域名)
于 2012-07-24T08:15:40.310 回答
1

看看 parse_url() 函数。

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

只需 print_r() 来自 parse_url 的结果,看看你得到了什么。你可能想要这样的东西:

$ARRurlParts = parse_url($orgurl);

$newURL = $ARRelem["scheme"].
"://".$ARRelem["host"].
((isset($ARRelem["port"]))?":".$ARRelem["port"]:"").
$ARRelem["path"];
于 2012-07-24T08:16:23.750 回答
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;

部分灵感来自 Erwin Moller 的回答(我为什么投票)和网络上的片段。

于 2012-07-26T19:00:44.067 回答
-1

您可以删除从最后一个反斜杠到字符串末尾的所有内容。我很确定这dirname($_SERVER['REQUEST_URI'])不会完成这项工作。您也可以尝试使用dirname($_SERVER['SCRIPT_FILENAME']). 如果您没有一些花哨的 .htaccess 重写规则,最后一个应该工作。

于 2012-07-24T08:15:18.103 回答