我使用重定向功能将访问者重定向到某个页面,因为他们无法访问当前页面。功能如下:
$user->redirect('www.google.com');
die();
重定向功能链接到:
public function redirect($url="",$time=0) {
header("Refresh: $time; url=$url");
}
每当您被重定向时,您会短暂地看到一个白页,然后是您重定向到的页面。我假设白页是由die()
引起的。
我不喜欢它,我真的想摆脱这个。
答案 0 :(得分:3)
问题与die()
调用无关,但是您发送错误的标头来处理重定向。
执行机构
public function redirect($url="",$time=0) {
header("Refresh: $time; url=$url");
}
做的:
public function redirect($url) {
header("Location: $url", true);
}
甚至:
public function redirect($url, $temporal = false) {
header("Location: $url", true, $temporal ? 302 : 301);
}
通过这种方式,您将发送状态代码" 301"或" 302",表示重定向是暂时的,或永久的。默认为永久重定向,因为临时变量很少有用(尽管在您的情况下,由于权限而导致重定向,因此可能需要临时重定向)
(我还删除了$url
的默认值,因为重定向到空网址没有多大意义)
答案 1 :(得分:1)
而不是使用'刷新:'标题,你可以使用'位置:'。这样,页面就不必刷新,可能会导致您想要的行为。
public function redirect($url="/") {
header("Location: $url");
}
编辑:添加默认的$ url' /'所以,如果没有给出网址,它会重定向到主页
答案 2 :(得分:0)
我对上一个版本感到失望。帖子。关于die()!
发送标头时,浏览器需要一些时间才能采取措施。在这段时间之间,PHP进程将在您被重定向之前调用die()。这是阿育王位置和重定向 这样它会显示一个黑页,然后您/访客将被重定向。
好:将die()设置为结束过程,以避免程序内部进一步动作
坏:首先是空白页。
这取决于您的浏览器环境!例如:一个非常慢的工作站将向您显示此行为,您必须在意。想象浏览器确实知道标头重定向(今天(大多数情况下)不再存在)
要使浏览器采取措施,请执行以下操作:
function someaction() {
// ...
$user->redirect('www.google.com');
// which give the time for the browser
// without further execution of your code
return;
}
在这种情况下,访问者会在当前页面上停留很长时间,直到浏览器知道标题或cpu变慢,但在能够采取措施时才会采取行动。