【问题标题】:Unable to persist address in browser URL bar, during PHP 302 Redirect在 PHP 302 重定向期间无法在浏览器 URL 栏中保留地址
【发布时间】:2020-12-27 00:54:14
【问题描述】:

在我的页面上

/my/conditional/redirect/page/index.php

我有条件 PHP 302 重定向

<?php

if (!in_array($_SERVER['REMOTE_ADDR'], ['369.168.492.123'])) {

  // header('HTTP/1.1 403 Forbidden');
  header('Location: https://'.$_SERVER['HTTP_HOST'].'/my/redirect/index.php', TRUE, 302);
  exit;
}

else {

  [... PHP CODE HERE...]
}

?>

我试过这段代码:

  • 如上
  • 有和没有TRUE302 参数
  • 有和没有exit;
  • 有和没有https://'.$_SERVER['HTTP_HOST']

没关系。重定向总是将浏览器 URL 栏中的位置更改为:

/my/redirect/index.php

虽然我非常希望它坚持为:

/my/conditional/redirect/page/index.php

在不更新浏览器 URL 栏位置的情况下确保页面重定向(通过 302 Redirect)我缺少什么?

【问题讨论】:

    标签: php redirect http-status-code-302


    【解决方案1】:

    在不更新浏览器 URL 栏位置的情况下确保页面重定向(通过 302 重定向)我缺少什么?

    什么都没有。这就是 HTTP 重定向的工作原理。

    如果您想保留 URL,那么您需要执行 internal 重定向或代理请求,以便服务器为所请求的 URL 返回您想要的内容。

    【讨论】:

    • 好的。我可能在这里误解了一些东西。我总是在.htaccessmod_rewrite 中进行重定向。我部署的重定向有 98% 的时间是 301 重定向,它会更新浏览器 URL 栏中的位置。但我知道我也可以部署 302 重定向 重定向,它们不会更新浏览器 URL 栏中的位置。为了澄清起见,PHP重定向是否不允许mod_rewrite允许的所有这四个选项?非常感谢您的澄清。
    • 你误解了301和302的区别。301是永久的。 302 是临时的。不同之处在于,如果客户端遇到 301,则应该更新其有关 URL 的记录(例如,搜索引擎应该将人们直接引导到 301 的新 URL)。
    • PHP 可以使用 header 函数输出 301 和 302 HTTP 重定向。它可以将请求代理到不同的 URL,例如 cURL。
    • mod_rewrite 可以发出重定向[R],但如果您省略它,则不必这样做并且会执行内部重定向(然后 Apache HTTPD 将只提供来自原始 URL 的其他资源)。
    • 与网络服务器外部没有区别。从内部看,差异是微妙的。一方面,您的代码向 URL 发出 HTTP 请求并将结果返回给客户端。另一方面,服务器处理原始请求,就好像它是到不同的 URL 一样。
    猜你喜欢
    • 2016-01-02
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多