2

因为header("Location: ");header 需要与绝对路径而不是相对路径一起使用,所以我编写了这个函数来通过使用$_SERVER变量来获取绝对路径。

function getAbsolutePath($relativePath = "/site/123/") {
if (isset($_SERVER['HTTPS'])) {
    $protocol = 'https'; 
} else {
    $protocol = 'http';
}

$host = $_SERVER['HTTP_HOST'];

$port = $_SERVER['SERVER_PORT'];

$absolutePath = 'Location: ' . $protocol . "://" . $host  . ":" . $port . $relativepath;
return $absolutePath;
}

这是这样做的完美方法,还是有更好的选择?

4

3 回答 3

1

这就是制作绝对 URI 的“教科书”方式。

我想强调一些注意事项。

  1. $_SERVER['HTTPS']可能并不总是被定义;在这种情况下,$_SERVER['SERVER_PORT'] == 443应检查其状况;如果您使用通过 HTTP 转发流量的 HTTPS 负载平衡器,并且上述方法均无效,则您可能必须对其进行硬编码。

  2. $_SERVER['HTTP_HOST']也不总是被定义;这种情况很少发生,HTTP/0.9没有定义它,一些家庭 brew HTTP 脚本可能无法通过它。您可以查看$_SERVER['SERVER_NAME']以找到替代方法。

  3. 如果协议和端口分别是http, 80https, 443,则不需要添加:$port.

于 2012-10-12T01:44:14.380 回答
0

我觉得这个方法还可以。我认为你不能以其他方式做到这一点。

于 2012-10-11T14:18:37.910 回答
0

Location 标头字段中的绝对路径很好。不要担心使它成为一个完整的 URI。请参阅http://trac.tools.ietf.org/wg/httpbis/trac/ticket/185http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-21.html#header 。地点

于 2012-10-11T15:07:58.260 回答