【问题标题】:How do you pass in a redirect URL into a mod_rewritten page如何将重定向 URL 传递到 mod_rewritten 页面
【发布时间】:2009-01-28 04:43:29
【问题描述】:

我 mod_rewrite 我的页面与 SO 的做法非常相似。我有www.example.com/users/login/,它将在内部使用users.login.php,它充当控制器。我想传入一个参数作为登录完成后重定向到的页面。

如果你传入一个相对 URL,你最终会得到一个看起来非常奇特的 URL,因为你传入的是类似 questions/ 的东西,看起来像 users/login/questions/ 而不是 login.php?redir=questions.php

有没有人有任何 cmets 或解决方案可以很好地解决这个问题而不会严重污染 URL?我认为SO处理它的方式是将登录表单放在“”页面上。我想这是一个解决方案,但我正在寻找其他可能性。

编辑: 使用$_SERVER['HTTP_REFERER'] 似乎是迄今为止最好的解决方案。有什么理由不使用它吗?我知道你可以伪造推荐人,但这真的会造成任何损害吗?

【问题讨论】:

    标签: php mod-rewrite url-rewriting


    【解决方案1】:

    我在包含 url 的登录表单中使用隐藏字段,它对我有用。你也可以试试。

    1. 创建隐藏的输入字段。
    2. 将输入字段的值设置为$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
    3. 获取发布的网址并将用户重定向到该网址。

    注意:HTTP_REFERER 并不总是设置。

    【讨论】:

    • 但这并不能真正解决我的问题。我如何将这些数据获取到登录页面?
    • 您有一个默认值,否则在将用户发送到登录页面的页面中添加数据。
    • 谁说我一开始就有表格?
    • 您也没有告诉我们您是如何获得用户的用户名和密码的。你是用 ldap 还是 openid 来认证用户?
    • 没关系。我可以有一个空白的 login.php,这没关系。这并不能解决我如何将信息从另一个页面获取到该页面的问题。
    【解决方案2】:

    存储前一页访问的最佳做法是使用$_SESSION 全局变量。将HTTP_REFERER 用于统计以外的任何内容都是在要求用户滥用,因为您可以轻松伪造引荐来源。

    查看有关在 cookie 中存储多个会话 ID 的链接。 http://bytes.com/groups/php/7630-handling-multiple-sessions

    【讨论】:

    • 有可能打开 2 个窗口,这会弄乱会话方法
    • 我意识到这是一个小答案,但您可以在 cookie 中存储多个会话 ID。看看这个链接。 bytes.com/groups/php/7630-handling-multiple-sessions
    • 这会打开一大堆蠕虫。第二个最佳答案,但.. +1
    【解决方案3】:

    为什么不使用/users/login/?r=/questions/ 之类的网址?或者,如果您不想使用 URL 来获取返回地址,则可以使用 HTTP 引荐来源网址。

    【讨论】:

    • 或者您使用 cookie 或 JavaScript 并滥用 window.name 属性来存储位置。
    猜你喜欢
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    相关资源
    最近更新 更多