获取当前页面的完整 URL (PHP) [重复]

Posted

技术标签:

【中文标题】获取当前页面的完整 URL (PHP) [重复]【英文标题】:Getting the full URL of the current page (PHP) [duplicate] 【发布时间】:2011-01-15 06:21:00 【问题描述】:

我正在处理这个页面:http://localhost/projectname/custom.php

<?php echo $_SERVER['REQUEST_URI']; ?><?php echo $PHP_SELF; ?> 都没有给出完整的位置。我应该使用什么来获取完整的 url 位置?

【问题讨论】:

【参考方案1】:
function selfURL() 
 
    $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; 
    $protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s; 
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]); 
    return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI']; 
 

function strleft($s1, $s2)  return substr($s1, 0, strpos($s1, $s2)); 

【讨论】:

似乎来自那个网站:dev.kanngard.net/Permalinks/ID_20050507183447.html strleft 不存在(至少在最新版本的 PHP 中)。 pr1001 - strleft不是php内置函数,而是用户自定义函数【参考方案2】:

据我所知,没有原生方法,但你可以使用这个:

function curPageURL() 
 $pageURL = 'http';
 if ($_SERVER["HTTPS"] == "on") $pageURL .= "s";
 $pageURL .= "://";
 if ($_SERVER["SERVER_PORT"] != "80") 
  $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
  else 
  $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
 
 return $pageURL;

【讨论】:

如果您还检查$_SERVER["SERVER_PROTOCOL"]以了解协议可能会很好。 @PhoneixS 假设它是“HTTP/1.1”……我该怎么办? @Michael 您知道协议是 http,因此您可以将 http 添加到 url。在这个答案中,您假设所有请求都是 http,但可以使用其他协议来提供文件(例如在具有 mod_ftp 的 apache 服务器中,我认为它可以是 ftp)。 @PhoneixS 好吧,这似乎不是我可以直接使用的东西,即我必须将 HTTP/1.1(或 HTTP/1.0 或其他任何东西)映射到 http://,除非它可能改为 https://,所以我真的不知道其他可能的值可能映射到什么。反正看起来也不是简单的 1:1 映射,需要做一些解读。 @Michael 你可以像@Sorantis answer strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/") 一样提取协议。很奇怪,您会看到配置为通过 http 以外的其他协议为 php 页面提供服务的服务器,因此通常可以省略此检查。我只是在你是这个奇怪的服务器之一的情况下才评论它。【参考方案3】:

例如,如果您尝试将变量添加回您通过链接跟踪脚本传递的 URL 的末尾,您可以尝试以下操作:

$URI = array();
foreach($_GET as $key=>$val)

   if ($key!="link"&&$key!="id"&&$key!="type") $URI[] = "$key=".urlencode($val);

if (sizeof($URI)>0) $link.="&".join("&",$URI);

在这种情况下,“link”、“id”和“type”是我跟踪所需的变量,但我要跟踪的 URL 末尾有一个变量,它被我的脚本剥离为如果它是发送给它的查询的一部分;在将其传递给 header("Location:".$link) 之前,我需要将其添加回链接 URL。

如果这是您想要达到的效果,那么效果很好,并且比上面的示例要短。

【讨论】:

【参考方案4】:

检查这个...有点长而且很脏但效果很好...

 function absolutizeUrl ( $u, $p )
 
    $url = parse_url( $u );
    $page = parse_url( $p );

    if ( strpos( $u , '/' ) === 0 )
    
            //already absolute              
     else 
            $basePath = '';
            if (
                    isset( $page[ 'path' ] )
                    && strpos( ltrim( $page[ 'path' ], '/' ), '/' )
            )
            
                    $baseTokens = explode( '/', $page[ 'path' ] );
                    array_pop( $baseTokens ); // strip basename                     
                    $baseTokens[] = $u;
                    $u = join( '/', $baseTokens );
            
    
    if ( ! isset( $url[ 'host' ]))
    
            $u = 'http://'.$page[ 'host' ].'/'.ltrim( $u, '/' );
    
    return $u;
  

【讨论】:

【参考方案5】:

我发现这段代码很有帮助

$protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === 
FALSE ? 'http' : 'https';            // Get protocol HTTP/HTTPS
$host     = $_SERVER['HTTP_HOST'];   // Get  www.domain.com
$script   = $_SERVER['SCRIPT_NAME']; // Get folder/file.php
$params   = $_SERVER['QUERY_STRING'];// Get Parameters occupation=odesk&name=ashik

$currentUrl = $protocol . '://' . $host . $script . '?' . $params; // Adding all

echo $currentUrl;

【讨论】:

等待... $_SERVER['SERVER_PROTOCOL'] == "HTTP/1.1" 即使使用 https!

以上是关于获取当前页面的完整 URL (PHP) [重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP中获取当前页面的完整URL

PHP中获取当前页面的完整URL

PHP中获取当前页面的完整URL

PHP中获取当前页面的完整URL

PHP中获取当前页面的完整URL

PHP/JS中获取当前页面的完整URL