0

所需场景:

当访问者到达通常返回 404 错误的 URL 时,脚本将首先自动发现是否有任何现有页面可以为该页面提供相关内容并将访问者从 404 页面重定向到匹配的相关 URL(如基于其他 404'ing URL 中的文本的自动“我感觉很幸运”搜索)。

如果没有现有页面被认为是相关的,那么“智能 404”系统会将用户传送到 404 页面。

4

2 回答 2

2

您可以使用此脚本:http ://bobpeers.com/technical/404_redirection

<?php 
$request=$_SERVER['REQUEST_URI'];

$arrMoved=array("/path/oldname.php"=>"/path/newname.php",
            "/old_path/oldname.php"=>"/new_path/newname.php");

if(array_key_exists($request,$arrMoved))
    {
    $newplace="http://".$_SERVER['HTTP_HOST'].$arrMoved[$request];
    header("HTTP/1.0 301 Moved Permanently");
    header("Location: $newplace");
    header("Connection: close");
    exit();
    }
else
    {
    header("HTTP/1.0 404 Not Found");
    }

?>

<!-- 
Your normal HTML code goes here since if a match is found the visitor will have been redirected. Only genuine 404 errors will see the HTML below.
 -->

<html>
  <head>
    <title>404 Error page</title>
  </head>
  <body>
    <p>Sorry but this page isn't here.</p>
  </body>
</html>
于 2012-05-07T17:19:54.247 回答
1

我建议检查 MultiViews。Apache 的 MultiViews 允许您将 URL 作为参数处理——这就是 WordPress、Drupal 和其他框架处理传入 URL 的方式。

以下是 Apache 文档中的一些文本,可帮助您理解:

" MultiViews 选项启用了 MultiViews 搜索。如果服务器收到对 /some/dir/foo 的请求并且 /some/dir/foo 不存在,则服务器读取目录以查找所有名为 foo 的文件,并且有效地伪造了一个类型映射,它为所有这些文件命名,为它们分配相同的媒体类型和内容编码,如果客户端按名称要求其中一个,它将具有相同的媒体类型和内容编码。然后它选择最符合客户端要求的匹配,并返回那个文件。

这在其他框架中的工作方式是 /some/dir/foo/other/parameters 导致“foo.php”被处理。foo.php 可以包含您的自定义代码来处理所有传入请求 - 包括花哨的 404、更好的 SEO URL 等等。

于 2012-05-07T17:22:34.220 回答