【问题标题】:404 Error Page ~ Redirect an Image - PHP404 错误页面 ~ 重定向图像 - PHP
【发布时间】:2009-04-14 17:20:50
【问题描述】:

我在 PHP 应用程序中使用自定义 404 页面。

在那个 404 页面上,我检查某些不再存在的“已知”旧页面,然后将用户重定向到更新或最相关的当前页面。效果很好。

现在我面临着一系列已被删除的旧图像,并且我正在寻找一种将图像重定向到新图像的方法(如果可能,所有这些都在 php 代码中)。

我已经四处打猎了,结果空空如也。

有什么办法吗?

这是我的代码示例:

<?php
    //-- grab info regarding bad request --
    $root       = $_SERVER['DOCUMENT_ROOT'];
    $page       = parse_url($_SERVER['REQUEST_URI']);
    $page       = $page['path'];
    $referer        = $_SERVER['HTTP_REFERER'];
    $host       = $_SERVER['REMOTE_HOST'];

    //-- try to redirect old pages/files ----------------------
    //
    $page = urlencode($page);

    if ( stristr($page, "some_old_file.zip") ) {
        // Example file redirect
        echo    "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;URL=http://www.site.com/the/new/file.zip\">";

    } elseif ( stristr($page, "some_old_page.php") ) {  
        // example webpage redirect
        echo    "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;URL=http://www.site.com/the/new/page.php\">";

    } elseif ( stristr($page, "some_old_image.jpg") ) {
        // not sure how to do this ...
        // ...
        // ...
        // ...
        // ...
        // ...
        // not sure how to do this ...          
    } else {
        // everything else - direct to custom 404 search page
        echo    "<META HTTP-EQUIV=\"refresh\" CONTENT=\"0;URL=http://www.site/com/the/custom/404_help.php?page={$page}\">";
    }
    //
    // -------------------------------------------------------

?>

【问题讨论】:

    标签: php apache redirect


    【解决方案1】:

    不要输出元刷新,而是使用位置标头

    header("Location: /path/to/image.jpg\r\n");
    

    \r\n 只是用于分隔标题的新行。

    注意:标头必须在任何其他输出之前发送

    【讨论】:

    • 记得在 header() 调用之后去 die()。
    • 我从未在我的位置重定向中使用过 \r\n,它仍然可以正常工作。
    • 这里不需要\r\n,这表明adam 是或知道perl 开发人员:)。 header() 函数会为您创建每一行标题,并且不会让您插入额外的行。试试这个看看我在说什么 header("Location: example.com\r\nContent-Type: text/plain");
    • 标头('HTTP/1.1 301 永久移动'); header ('位置:'.$location);
    • 谢谢 - 永远忘记 \r\n 是一个传统的回归。 OIS 和 Csaba 提到的 301/2 也是一个重要的部分
    【解决方案2】:

    您将需要服务器端重定向。 查看 php 函数“标头”和 http 状态代码 301(永久移动)。 您会发现大量现成的 5 衬里解决方案。

    如果我是你,我也会对 html 内容使用这种方法来通知搜索引擎相同内容的新位置。

    【讨论】:

      【解决方案3】:

      我的建议是在 Apache 中使用 Apache 重定向(在您的 Apache conf 文件或 .htaccess 中)执行此操作。你可以这样做:

      RedirectMatch old_file_path new_file_path
      

      这不仅会提高您的性能,而且您不必每次都进行查找。最好的部分是,如果您将来需要添加更多丢失的重定向,它将是可管理的。

      【讨论】:

      • 如何有效地扩展到数千个文件?使用 PHP 脚本,作者可以使用数据库后端...
      • 没错,它可以,在这种情况下,充满重定向的配置文件只能为所有一千个重定向生成一次,而不必再次访问数据库。由于大多数较旧的重定向都是静态的,因此您不必过于频繁地重新生成列表。
      猜你喜欢
      • 2013-06-09
      • 1970-01-01
      • 2016-01-06
      • 2023-03-27
      • 2018-10-14
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多