获取完整请求 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']; }
奇怪的是,完整的请求 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