使用PHP获取脚本的绝对URL?

时间:2010-06-08 08:15:21

标签: php

基本上,我希望我的脚本输出其绝对URL,但我不想将其静态编程到脚本中。例如,如果我当前的URL为http://example.com/script.php,我希望能够将其存储为变量,或者回显它。即$url = http://example.com/script.php;

但是,如果我将脚本移动到其他服务器/域,我希望它自动调整到那个,即$url = http://example2.com/newscript.php;

但我不知道如何去做。有什么想法吗?

5 个答案:

答案 0 :(得分:6)

$url = "http://" . $_SERVER['HTTP_HOST'] . '/script.php';

如果协议也有可能发生变化(即https而不是http),请使用:

$url = ($_SERVER['HTTPS'] ? "https://" : "http://") . $_SERVER['HTTP_HOST'] . '/script.php';

答案 1 :(得分:3)

$_SERVER['HTTP_HOST']$_SERVER['SCRIPT_NAME']包含此信息。

更新:作为@Col。 Shrapnel指出,SCRIPT_NAME返回脚本相对于主机的实际路径,而不是请求的URL,如果使用URL重写,则可能会有所不同。此外,与REQUEST_URI不同,它不包含可能附加的变量。

请注意,SCRIPT_NAME的内容与PHP_SELF相同,不同之处在于:

  

SCRIPT_NAME在CGI 1.1中定义   规范,因此是一个标准。   但是,实际上并非所有的Web服务器   实现它,因此它不是   必须携带。 PHP_SELF,关于   另一方面,是直接实现的   PHP,只要你编程   在PHP中,将永远存在。

答案 2 :(得分:1)

打赌(

$ _ SERVER ['HTTP_HOST']和$ _SERVER [“REQUEST_URI”];

然而,$ _SERVER ['HTTP_PORT']和$ _SERVER ['HTTPS']可用于关键案例

但是,大部分时间你都不需要所有这些,除了$ _SERVER [“REQUEST_URI”] 因为浏览器已经知道其余部分:端口,主机和所有内容。

答案 3 :(得分:0)

尝试使用

$url = "http://{$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}";

答案 4 :(得分:0)

我有一个可以帮助我在网络服务器上执行此操作的库,并且对mod_rewrite也是不可知的。

该库名为Bombay:http://github.com/sandeepshetty/bombay

要使用它,您需要这样做:

<?php

    require '/path/to/bombay.php';
    requires ('uri');

    echo absolute_uri('script.php');

    //prints http://example.com/script.php if hosted on example.com and accessed over http
    //prints https://example2.com/script.php if hosted on example2.com and accessed over https

?>

你也可以研究代码,并采取你需要的。