基本上,我希望我的脚本输出其绝对URL,但我不想将其静态编程到脚本中。例如,如果我当前的URL为http://example.com/script.php
,我希望能够将其存储为变量,或者回显它。即$url = http://example.com/script.php;
但是,如果我将脚本移动到其他服务器/域,我希望它自动调整到那个,即$url = http://example2.com/newscript.php;
但我不知道如何去做。有什么想法吗?
答案 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
?>
你也可以研究代码,并采取你需要的。