【问题标题】:Weird # at end of URL when redirecting between pages在页面之间重定向时奇怪的 # 在 URL 的末尾
【发布时间】:2015-01-01 11:16:48
【问题描述】:

我遇到的问题是 #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 再次显示登录表单,而不仅仅是我的主页。不知道我做错了什么?或在哪里寻找好的答案,任何帮助表示赞赏。谢谢。

这是代码的sn-ps:

打开登录表单:<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();

【问题讨论】:

    标签: php html css redirect


    【解决方案1】:

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

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

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

    7.1.2。位置
    
         位置 = URI 参考
    
       字段值由单个 URI 引用组成。当它有
       相对引用的形式 ([RFC3986], Section 4.2),最终
       值是通过根据有效请求 URI 解析来计算的
       ([RFC3986], Section 5)。
    
       ...
    
       如果 3xx(重定向)响应中提供的 Location 值
       没有片段组件,用户代理必须处理
       重定向就像值继承了
       用于生成请求目标的 URI 引用(即
       重定向继承原始引用的片段(如果有)。
    

    参考文献

    【讨论】:

    • 感谢您提供的信息,它给了我一些可以查找的信息。在这里找到了解决方法:http://stackoverflow.com/questions/14076913/header-location-not-working-properly
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2019-08-08
      • 2016-03-27
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多