在 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(&lt;a&gt;&lt;/a&gt;)中target属性的取值类似,除了_self 价值:

_blank在新窗口或标签页中打开链接的文档

_parent在父框架中打开链接的文档

_top在整个窗口中打开链接的文档

framename在命名框架中打开链接的文档

【讨论】:

【参考方案7】:

如果您使用的是 javascript,您应该使用 exit() 函数来停止重定向函数下方脚本的每次执行。否则,如果有人在浏览器中关闭了javascript,则会执行以下语句。

【讨论】:

【参考方案8】:

只是一个使用HEREDOCPHP 的快速脚本,它允许您将重定向脚本存储到一个变量中,并且非常易读并提高了可重用性。

    $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 方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中重定向到外部URL

如何在PHP中重定向到同一页面

PHP中重定向网页跳转页面的方法(共三种)

如何在 Rails 中重定向到 404?

PHP中重定向标头之后的所有代码都会被执行吗?

如何在 Codeigniter 中重定向和删除 index.php [重复]