获取完整请求 url 的函数

如果请求是通过 HTTPS 协议执行的,HTTPS 变量将被设置为非空值,知道这一点,然后我们可以使用空函数来检查变量是否不为空。

由于在不使用 HTTPS 时,Windows 上的 ISS 可能会将变量设置为“关闭”,因此我们还需要检查该变量是否未设置为“关闭”。

通常网页上的 HTTP 请求会通过端口 80(或者 443 为 HTTPS),因此大多数情况下不需要包含端口号;如果由于某种原因你仍然需要它,你可以通过 SERVER_PORT 变量获得它:

$full_request_url = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://'. $_SERVER['HTTP_HOST'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'];

我们可以轻松创建一个函数来在需要时返回完整的请求 URL:

function full_request_url() {
  return (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://'. $_SERVER['HTTP_HOST'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI'];
}
在 PHP 中获取完整的请求 URL

奇怪的是,完整的请求 URL 不能直接从 PHP 访问,因为似乎没有变量或者函数可以显示它;但是,我们可以创建自己的函数来获取它——为此,我们需要使用 $_SERVER 变量的组合:

  • HTTP_HOST
  • REQUEST_URI
  • HTTPS

要获得完整的请求 URL,我们可以使用 $_SERVER 变量的组合来“猜测”该 URL——下面是如何做到这一点的快速示例:

$full_request_url = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http') . '://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

如果上面的简短 if 语句太难阅读,我们也可以这样编码:

$full_request_url = '';
if ((!empty($_SERVER['HTTPS'])) && ($_SERVER['HTTPS'] !== 'off')) {
  $full_request_url .= 'https://';
} else {
  $full_request_url .= 'http://';
}
$full_request_url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

我们将无法返回散列“#”字符之后的部分,也称为 URL 的片段部分,因为它不会作为客户端请求的一部分发送到服务器。
散列主要用于小节上的客户端导航,并对应于网页上 HTML 中的唯一 ID。
因此,如果片段部分很重要,我们将需要使用 JavaScript 来获取它。

日期:2020-06-02 22:15:45 来源:oir作者:oir