【问题标题】:Cant redirect using php's header function无法使用 php 标头函数重定向
【发布时间】:2018-01-10 10:05:22
【问题描述】:

我遇到了一个非常奇怪的问题。我正在网站上进行大量重定向,并希望将“/old_url”和“/old_url.html”重定向到“/new_url”。 Everyting 与“/old_url”一起工作正常,但“/old_url.html”总是返回 404。在检查响应标头后,我可以看到我的重定向在那里列出,但它根本没有重定向。 这是我的代码

 if($query && !headers_sent()){
        header('Location: ' . $query[0]['new_url'], true, (int)$query[0]['status_code']);
        exit;
 }

这是来自浏览器的响应标头。

如您所见,有一个位置标题。有谁知道为什么它不起作用?

【问题讨论】:

  • 猜猜:(int)$query[0]['status_code']404...!?
  • 如果要使用重定向,请将HTTP状态码设置为3XX。
  • 不,我的状态码是 302。

标签: php redirect header


【解决方案1】:

如果 HTTP 状态为 404,我认为浏览器不会跟随 Location 标头。在响应中发送 301 状态代码,你应该没问题

您的回复应如下所示:

HTTP/1.1 301 Moved Permanently
Location: {URL}

另外我建议将重定向发送到绝对网址

更新

看看这个:http://php.net/http-response-code

【讨论】:

    【解决方案2】:

    奇怪.. 此代码无效。

     header('Location: ' . $query[0]['new_url'], true, (int)$query[0]['status_code']);
     exit;
    

    但这一个有效。

    switch($query[0]['status_code']){
        case 301:
         header("HTTP/1.1 301 Moved Permanently"); 
         header("Location: " . $query[0]['new_url']);
         exit;
        break;
        case 302:
          header("HTTP/1.1 302 Moved Temporarily"); 
          header("Location: " . $query[0]['new_url']);
          exit;
         break;
        }
    

    【讨论】:

      【解决方案3】:

      /old_url,是一条会导致读取index.php / index.htm的路径。

      /old_url.html 是一个文件,它试图读取文件本身,而不是任何 PHP 脚本。

      您可能想使用 htaccess 之类的东西进行重定向。

      【讨论】:

      • 这在很大程度上取决于您现在的 Web 服务器配置,不是吗?也不确定这如何回答任何问题。
      • 取决于配置,是的。但它是默认的,所以我会试一试。但是,无论如何,使用 htaccess 重定向可能是更好的解决方案。
      • 仅仅因为某些内容以 .html 结尾并不能使其成为有效的 html 文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多