PHP位置标头绝对路径

时间:2012-10-11 13:46:09

标签: php http url header

因为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;
}

这是完美的方法,还是他们的更好的替代方案?

3 个答案:

答案 0 :(得分:1)

这是制作绝对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

答案 1 :(得分:0)

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

答案 2 :(得分: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.location