PHP 位置标头绝对路径



因为header("Location: ");标头需要与绝对路径而不是相对路径一起使用,所以我使用$_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;
}

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

这是制作绝对 URI 的"教科书"方式。

我想强调一些注意事项。

  1. $_SERVER['HTTPS']可能并不总是被定义;在这种情况下,应该检查$_SERVER['SERVER_PORT'] == 443的条件;如果你在通过HTTP转发流量的HTTPS负载均衡器后面,并且上述方法都不起作用,你可能必须对其进行硬编码。

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

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

我认为这种方法还可以。我不认为你可以用其他方式做到这一点。

位置标头字段中的绝对路径很好。不要担心使其成为完整的 URI。查看 http://trac.tools.ietf.org/wg/httpbis/trac/ticket/185 和 http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p2-semantics-21.html#header.location

最新更新