【问题标题】:PHP location header absolute path [closed]PHP位置标头绝对路径[关闭]
【发布时间】:2012-10-02 04:56:23
【问题描述】:

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

这是这样做的完美方法,还是有任何更好的替代方法?

【问题讨论】:

  • "/site/123/" 不是相对路径。它将从根目录开始。
  • @PLB 我认为 OP 真的意味着完整的主机+协议而不是相对路径。完整的主机在技术上规范要求的,尽管这里很少有人倾向于使用它。 en.wikipedia.org/wiki/HTTP_location
  • 从 HTTP 1.1 绝对 URI 总是以方案名称开头,后跟冒号。
  • 是的,就是这样。根据 HTTP 1.1 RFC,/site/123/ 不是绝对路径。
  • Zulakis,它不是一个(绝对)URI,但它肯定是一个绝对路径。

标签: php http url header


【解决方案1】:

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

【讨论】:

  • 始终使用参考资料来支持您的答案,不要使用“我认为/我想”之类的概念,他们不会得出任何结论。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    这是制作绝对 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-05-19
      • 2018-02-21
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 2014-07-23
      相关资源
      最近更新 更多