返回标题为头的页面(“ Location:”);在PHP中


Answers:


246

尝试:

header('Location: ' . $_SERVER['HTTP_REFERER']);

请注意,这可能不适用于安全页面(HTTPS),并且总体而言,这是一个非常糟糕的主意,因为可以劫持标头,将用户发送到其他目标位置。标头甚至可能不会由浏览器发送。

理想情况下,您将需要:

  • 将返回地址作为查询变量附加到请求中(例如?back = / list)
  • 在代码中定义返回页面(即,所有成功提交的表单都重定向到列表页面)
  • 向用户提供他们下一步要去的位置的选项(例如,保存并继续编辑或仅保存)

19
发生了奇怪的事情:)
Dimitry

3
@Col这样您可以证明一个实际的问题吗?
Pekka

1
使用引用程序,在事先测试它是否设置和有效之后,在定义的页面到页面上下文中可以是一种完全可以接受的做法-绝大多数浏览器都会发送正确的HTTP_REFERER。
Pekka

1
@Col我必须在演示中完成某些工作时才在生产中使用它。从您的回答中可以看到,我将提供其他三个解决方案,而不是基于HTTP_REFERER的重定向。
Dimitry'3

2
@Madmartigan听起来真的很奇怪,我在网上看到的唯一提示就是重定向问题。无论如何,我同意在使用引用者是没有办法的办法,如果你需要100%的安全
佩卡·

22

它是如此简单,只需使用此

header("location:javascript://history.go(-1)");

对我来说很好


2
这听起来确实很聪明,但是在FF10中我明白了,"Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."所以这基本上是不可用的。
Wesley Murch

Wesley Murch,它对我几乎所有主流浏览器都适用,包括您提到的那种浏览器。仅当您进入具有历史记录的页面时,它才对您有用。
Hammad 2012年

5
这可能导致从浏览器缓存中提供上一页。
aksu

14

您必须以某种方式保存该位置。

假设它是POST表单,只需将当前位置放在隐藏字段中,然后在“ header()位置”中使用它即可。


14

只是一点补充:我相信exit;在标头函数之后添加是很常见的事情,以防我们不希望其余代码加载或执行...

header('Location: ' . $_SERVER['HTTP_REFERER']);
exit;

对我来说只是“”。
亚历山大·郭

2

只需在Javascript中尝试一下:

 $previous = "javascript:history.go(-1)";

或者您可以在PHP中尝试:

if(isset($_SERVER['HTTP_REFERER'])) {
    $previous = $_SERVER['HTTP_REFERER'];
}

1

将先前的URL存储在会话变量中是不好的,因为用户可能右键单击多个页面,然后返回并保存。

除非您将会话变量中的前一个url保存到表单中的一个隐藏字段中,然后保存标题(“ Location:保存调用页面的URL”);


为什么我们不能只使用$ _SERVER ['http_referrer']?
Vignesh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.