在 PHP 中重定向而不使用 header 方法
Posted
技术标签:
【中文标题】在 PHP 中重定向而不使用 header 方法【英文标题】:Redirect in PHP without use of header method 【发布时间】:2015-01-23 06:21:45 【问题描述】:此contact.php 表单正在处理提交,然后重定向到新页面,然后突然停止工作。我尝试添加错误处理并将标题移动到所有其他标题的顶部,但两者都不起作用。表单仍在按预期提交数据,只是重定向不起作用。任何想法将不胜感激。
<?php
include 'config.php';
$post = (!empty($_POST)) ? true : false;
if($post)
$email = trim($_POST['email']);
$subject = "Downloaded Course Units";
$error = '';
if(!$error)
$mail = mail(WEBMASTER_EMAIL, $subject, $message,
"From: ".$email."\r\n"
."Reply-To: ".$email."\r\n"
."X-Mailer: PHP/" . phpversion());
if($mail)
echo 'OK';
header('location: http://www.google.com.au/');
exit();
?>
【问题讨论】:
请移除 exit(); 您可能会发现这很有用:-> ***.com/questions/768431/… PHP 标头是执行此操作的正确方法。 javascript / Meta 标签不那么可靠。删除回声'OK';行(和任何其他页面输出生成行),否则标题重定向将不起作用(除非您在 php.ini 中有输出缓冲)... exit() 是必需的,否则脚本将继续执行! 【参考方案1】:使用 javascript。
代替
header('location: http://www.google.com.au/');
使用,
?>
<script type="text/javascript">
window.location.href = 'http://www.google.com.au/';
</script>
<?php
即使你的浏览器有输出,它也会重定向。
但是,要采取一项预防措施:即使页面上打印了某些内容,Javascript 重定向也会重定向您的页面。
确保它不会跳过任何用 PHP 编写的逻辑。
【讨论】:
那么元刷新呢?这将是一个没有 JS 的解决方案,因为问题是指 PHP。【参考方案2】:用下面的代码替换header('location: http://www.google.com.au/');
行以在php中重定向而不使用header函数。
$URL="http://yourwebsite.com/";
echo "<script type='text/javascript'>document.location.href='$URL';</script>";
echo '<META HTTP-EQUIV="refresh" content="0;URL=' . $URL . '">';
如果你想知道为什么我同时使用 Meta 标签和 JavaScript 来重定向,那么答案很简单。
如果浏览器禁用了 JavaScript,则元标记将重定向页面。
【讨论】:
那么你应该把javascript放在html META之前。因为可以禁用 JS 但不能禁用 HTML!不是吗? 它工作正常,但每次页面都经常刷新。 我正在使用元标记来刷新 php 页面,但我想知道这是否是不好的做法?【参考方案3】:包含后标题不起作用,回显。 再试一次,不包括,回声。 或代替函数头 使用
echo '<meta http-equiv="refresh" content="0; URL=http://www.google.com.au/">';
【讨论】:
【参考方案4】:我解决了这个问题:
function GoToNow ($url)
echo '<script language="javascript">window.location.href ="'.$url.'"</script>';
使用: GoToNow('http://example.com/url-&error=value');
【讨论】:
【参考方案5】:如果您想在 html 代码之后重定向到另一个页面,请使用 location.href
javascript 方法。
参考这个示例代码:
<html>
<head>
<title> Using the href property of the Location object</title>
</head>
<body>
<script language="JavaScript">
<!--
function show()
document.location.href ="http://www.java2s.com";
-->
</script>
<form name="form1">
<br>
<input type="button" name="sethref" value="Set href" onClick='show()'>
<br>
</form>
</body>
</html>
【讨论】:
【参考方案6】:除了上述答案之外,您还可以在文档和主窗口以及 iframe 中使用以下 JavaScript 代码:
<script type="text/javascript" >
window.open('http://www.google.com.au/', '_self');
</script>
_self 在原来的框架中打开链接的文档。
上述命令中,第二个参数的取值与HTML中标签A(<a></a>
)中target属性的取值类似,除了_self 价值:
_blank在新窗口或标签页中打开链接的文档
_parent在父框架中打开链接的文档
_top在整个窗口中打开链接的文档
framename在命名框架中打开链接的文档
【讨论】:
【参考方案7】:如果您使用的是 javascript,您应该使用 exit()
函数来停止重定向函数下方脚本的每次执行。否则,如果有人在浏览器中关闭了javascript
,则会执行以下语句。
【讨论】:
【参考方案8】:只是一个使用HEREDOC
和PHP
的快速脚本,它允许您将重定向脚本存储到一个变量中,并且非常易读并提高了可重用性。
$homePage = "'http://localhost:8000/'";
$redirect = <<<REDIRECT
<script type="text/javascript">
window.location.href = $homePage;
</script>
REDIRECT;
稍后在你的代码中,只要你需要用echo
吐出
echo $redirect;
更好的是,我们还可以将它添加到一个名为 redirect 的函数中,并带有一些默认变量。
function redirect(string $slug = '/', string $root='http://localhost:8000'): string
return <<<REDIRECT
<script type="text/javascript">
window.location.href = '$root$slug' ;
</script>
REDIRECT;
转到默认http://localhost:8000/
echo redirect();
转到谷歌地图
echo redirect(slug : '/maps', root: 'https://www.google.com');
【讨论】:
以上是关于在 PHP 中重定向而不使用 header 方法的主要内容,如果未能解决你的问题,请参考以下文章