如何使用PHP从地址栏检索完整的URL?
可能重复:如何使用PHP从地址栏检索完整的URL?,php,Php,可能重复: 我使用这个函数,但它并不总是工作。有人能给个提示吗 function sofa_get_uri() { $host = $_SERVER['SERVER_NAME']; $self = $_SERVER["REQUEST_URI"]; $query = !empty($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : null; $ref = !empty($query) ? "http://
我使用这个函数,但它并不总是工作。有人能给个提示吗
function sofa_get_uri() {
$host = $_SERVER['SERVER_NAME'];
$self = $_SERVER["REQUEST_URI"];
$query = !empty($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : null;
$ref = !empty($query) ? "http://$host$self?$query" : "http://$host$self";
return $ref;
}
我想检索地址栏中的链接(确切地说),以便在用户注销时使用它将其引用回来。URL不同:
http://domain.com/sample/address/?arg=bla
http://domain.com/?show=bla&act=bla&view=bla
http://domain.com/nice/permalinks/setup
但我不能得到一个在所有情况下都能工作的函数,并给我真正的推荐人
请提示。您可以使用上面的函数检索URL,直到获取参数。 所以您有类似字符串='localhost/site/tmp'(示例)。 在这之后,如果无法获得任何其他工作,您可以循环获取参数。 在字符串末尾手动添加“?”
$str = 'localhost/site/tmp/?'
foreach ($_GET as $key => $value) {
$str .= $key.'='.$value.'&';
}
substr_replace($str, "", -1);
echo$str;
最后,您将删除最后一个符号,该符号为“&”,不需要。这个如何
function getAddress() {
$protocol = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http';
return $protocol.'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
}
echo getAddress();
这段代码工作正常吗?输出代码i的localhost/site/tmp/?我想,它必须工作正常,尽管我还没有尝试过。输出将是:localhost/site/tmp/?get1=val1&get2=val2$str必须从$\u服务器的主函数之一获取。并且将添加所有GET参数。
$protocol
中的条件语句应该是isset($\u SERVER['HTTPS'])===true
。请注意:这是一个快速而肮脏的解决方案,但在大多数情况下都有效。这种方法包含两个值得考虑的方面。HTTPS和HTTP_主机不是标准的,可能会被忽略或配置错误。HTTP_主机可能为空或包含任何字符串数据(+可能使用请求头中的主机进行“客户端黑客攻击”)。最佳做法是使用多个检查(服务器\协议和请求\方案以及HTTPS;服务器\名称比HTTP \主机更可靠,但也可能配置错误)。归根结底,这个函数大部分时间都在工作,但它不是通用的、可靠的解决方案。在AJAX请求的情况下,请求URI可能与地址栏中的请求URI不同。