【问题标题】:localhost redirected you too many times using mod_rewritelocalhost 使用 mod_rewrite 将您重定向了太多次
【发布时间】:2020-01-28 20:43:25
【问题描述】:
if( isset($_COOKIE['user']) && !empty($_COOKIE['user']) ){
    header("Location: ./");
}

这是我的登录页面代码。我想要实现的是每当有人登录时[如果存在名为user 的cookie],用户应该被重定向到主页。我正在使用 mod_rewrite 来编写 URL。

我面临的问题是,只要 cookie 存在,并且我转到 localhost/project/login/,它就会显示 ERR_TOO_MANY_REDIRECTS:

但是,当我使用 localhost/project/login.php 时,它可以正常工作。

【问题讨论】:

  • 如果您投反对票...请告诉我原因...我正在尝试在这里学习...而且我也经历过stackoverflow和google。
  • 主页是否也进行了重定向返回登录?
  • @nealio82 : 当我点击主页上的登录按钮时,如果 cookie 存在,它会重定向回登录页面...效果很好!!
  • “它重定向回 登录页面...效果很好” - 尽管在您的问题的顶部您说“用户应该被重定向到 主页”。 - 应该是哪个?登录页面还是主页?点击登录按钮时的 URL 是什么?

标签: php authentication redirect mod-rewrite


【解决方案1】:
header("Location: ./");

./ 是一个相对 URL。因此,如果您在 HTTP 响应中发回 Location: ./,则 浏览器 会将其解释为相对于浏览器中当前显示的内容。

所以...

当请求localhost/project/login/(注意尾部斜杠)时,浏览器将重定向回localhost/project/login/(相同的URL - 重定向循环)。

当请求localhost/project/login.php时,浏览器会重定向到localhost/project/(我假设是你的主页)。

要始终从任何 URL 路径深度重定向回主页 (/project/),那么您至少需要在 Location 标头中指定一个根相对 URL。例如:

header('Location: /project/');

(或者,为了构造一个相对 URL 路径,你会从请求中计算当前路径深度。但如果你要这样做,那么你不妨计算主页的绝对 URL - 或者有这个存储 - 这可以说是更可取的。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2020-08-26
    • 2020-01-03
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多