获取 PHP 中的完整 URL

新手上路,请多包涵

我使用此代码获取完整的 URL:

 $actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

问题是我在 .htaccess 中使用了一些掩码,所以我们在 URL 中看到的并不总是文件的真实路径。

我需要的是获取 URL,写在 URL 中的内容,不多也不少——完整的 URL。

我需要了解它在 Web 浏览器导航栏中的显示方式,而不是服务器上文件的真实路径。

原文由 DiegoP. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 436
2 个回答

看看 $_SERVER['REQUEST_URI'] ,即

$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

(请注意,双引号字符串语法是 完全正确的

如果你想同时支持 HTTP 和 HTTPS,你可以使用

$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

编者注: 使用此代码具有 安全隐患。客户端可以将 HTTP_HOST 和 REQUEST_URI 设置为它想要的任意值。

原文由 ax. 发布,翻译遵循 CC BY-SA 4.0 许可协议

    public static function getCurrentUrl($withQuery = true)
    {
        $protocol = (!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off')
        or (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https')
        or (!empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off')
        or (isset($_SERVER['SERVER_PORT']) && intval($_SERVER['SERVER_PORT']) === 443) ? 'https' : 'http';

        $uri = $protocol . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

        return $withQuery ? $uri : str_replace('?' . $_SERVER['QUERY_STRING'], '', $uri);
    }

原文由 smarteist 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏