通过 AJAX 调用的 PHP 脚本能否获取当前页面的 URL?

7

嗯...就像标题所说的一样; 我有一个PHP脚本通过AJAX调用在page1上执行。我能否使用标准的$_GET从被AJAX调用的PHP中访问page1的当前URL / URI,还是我需要将要传递的参数与其他数据一起传递到AJAX页面?

谢谢,

詹姆士


1
这是一个相关问题 - Lee
1个回答

17

Referrer应该可以解决问题。

echo $_SERVER['HTTP_REFERER']

从您的PHP脚本内部

更具体地说: 页面1调用页面2。然后,您可以输出上面的变量以查找页面1的URL。如果您需要页面2的URL,则应使用:

$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

在尝试访问这些内容之前,您应该先检查它们是否存在。我有时会这样做:

$server = array_merge(array('HTTP_HOST'=>null, 'REQUEST_URI'=>null, 'HTTP_REFERER'=>null), $_SERVER);

我会访问变量"$server",而不是使用$_SERVER。或者你也可以使用@$_SERVER[]来抑制错误。


1
据我了解,一些浏览器在 AJAX 请求时不发送 Referrer(就 HTTP 规范而言,它是一个可选的头部信息,因此无论如何都可能存在或不存在)。无论如何,在确定依赖该功能的代码之前,我会确保在所有支持的浏览器的所有支持版本上都进行检查。 - Lee
谢谢Lee - 我会记住的,并在AJAX请求中发送我想要的URL参数。 - Bojangles
好的,经过进一步阅读,确实有时候referrer并不会出现,但是我找不到一个网页来告诉我哪些浏览器会发送referrer。如果是这样的话,你可以通过脚本将 uri 字符串传递下去,或者如果你想要一个(可能)更清晰的方法,那么或许你可以通过 sessions 设置 referer。例如 $_SESSION['ref'] = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; 确保在覆盖它之前复制出它的值(如果它存在)。 - Jason
请注意,您不应该依赖此方法进行安全性保障,因为这种方法很容易被欺骗。如果您想要进行安全性保障,请使用其他可用的方法。 - chaimp
谢谢大家的评论。鉴于安全方面的考虑,我决定将我想要发送的数据与其他内容一起发送,而不是使用REQUEST_URI。这并不是非常重要的数据——只是一个论坛ID。 - Bojangles
echo $_SERVER['HTTP_REFERER'] 很有用。 - Jitesh Sojitra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接