在页面之间重定向时奇怪的#在 URL 的末尾

Weird # at end of URL when redirecting between pages

我遇到的问题是#f1 在我的所有页面之间传递,#f1 指的是我的登录表单,例如 127.0.0.1/#f1 使用 div 标签显示登录表单。表单发布到自身进行验证,然后重定向到 127.0.0.1/_af/act_login.php,使用会话变量登录用户使用 die(header(location:)); exit()。但是 URL 的末尾也会有 #f1,例如 127.0.0.1/_af/act_login.php#f1。然后,当我从该页面重定向回 127.0.0.1 时,它会再次传送它,例如 127.0.0.1/#f1 会再次显示登录表单,而不仅仅是我的主页。不确定我做错了什么?或者在哪里寻找好的答案,任何帮助表示赞赏。谢谢。

下面是代码片段:

调出登录表单:<a href="#f1"><li>Login</li></a>

登录表单:

<div id="f1">
    <div id="loginForm">
        <h3>Login</h3>
        <form name="loginForm" action="" method="post">
            <input type="hidden" name="form" value="Login" />
            <div>Email:</div>
            <div><input type="text" name="email" value="" /></div>
            <div id="newLine"></div>
            <div>Password:</div>
            <div><input type="password" name="password" /></div>
            <div id="newLine"></div>
            <div class="submitButton"><input type="submit" value="SUBMIT" /></div>
        </form>
    </div> </div>

PHP 一旦验证完成重定向:

die(header("Location: _af/act_login.php"));
    exit();
}

PHP 在创建日志条目并完成登录后重定向回来:

die(header('Location: http://127.0.0.1'));
    exit();

那是一个片段标识符,因为表单投递到它自己。从来没有见过 header 那样做,那不是在 header 之前杀死脚本吗?尝试将它们更改为

header("Location: _af/act_login.php");
die();

片段标识符 (#f1) 被复制到新位置,因为您使用的是 relative URI-Reference。您需要使用 absolute URI-Reference:

header ('Location: http://127.0.0.1/_af/act_login.php');

此行为在 RFC 7231 中有详细说明:

7.1.2.  Location

     Location = URI-reference

   The field value consists of a single URI-reference.  When it has the
   form of a relative reference ([RFC3986], Section 4.2), the final
   value is computed by resolving it against the effective request URI
   ([RFC3986], Section 5).

   ...

   If the Location value provided in a 3xx (Redirection) response does
   not have a fragment component, a user agent MUST process the
   redirection as if the value inherits the fragment component of the
   URI reference used to generate the request target (i.e., the
   redirection inherits the original reference's fragment, if any).

参考资料