将404重定向到类似的网址

我有一个网站,里面有故事。我可以在多个类别中拥有多种类型的故事,例如:

  • 孩子
  • 浪漫
  • 科幻
  • 行动
  • thriler
  • 任务

可以使用以下网址访问这些故事:

www.example.com/action/story-name-action/
www.example.com/romance/story-name-romance/

第一个参数(操作)和第二个参数(故事名称操作)使用规则使用 .htaccess 重定向。这部分工作得很好。

最近,我从不同的网站获得了几十个404,这是我想做的,但我不知道该怎么做:

如果有人键入,例如:,我想重定向到:/action/story-nme-ctionaction/story-name-action/

有没有一种有效的方法来实现这一点?


答案 1

哦,伙计,哦,伙计!

你所要求的并不简单,需要你有一台功能强大的计算机,但结果简直令人惊叹。

以下是我建议做的:

  • 对于404的正确处理,您可以在vhost配置中进行重定向。我的看起来像这样:ErrorDocumentErrorDocument 404 /404.php ;
  • 当有一个404时,Apache将使用所有参数进行调用(哪个错误的URL等等,转储才能看到这个)。您必须测试URL中是否只有两个表达式,即/404.php$_SERVER/http://mysite.com/(expr1)/(expr2)/
  • 如果没有,那就做一个经典的404。
  • 如果是,则使用MySQL(在您的文件中)进行SOUNDEX搜索。请参阅此处的查询示例。404 Php
  • 然后,在这个“特殊”的404案例中,做一个建议,就像谷歌所做的那样,即:“你的意思是?如果是这样,请单击链接”。/action/story-name-action/

这是一项艰苦的工作,但它既有趣又显示了您的技能。很少有网站这样做(实际上我只知道谷歌)。

这是我的法语表上的一个演示,可以给你一个关于它是如何工作的概述:

mysql> SELECT * FROM job WHERE
SOUNDEX( description ) LIKE SOUNDEX('Machiniste cinéma');
+-------+--------------------+
| id    | description        |
+-------+--------------------+
| 14018 | Machiniste cinéma  |
+-------+--------------------+
1 row in set (0.06 sec)

mysql> SELECT * FROM job WHERE
SOUNDEX( description ) LIKE SOUNDEX('Mchiniste cinéma');
+-------+--------------------+
| id    | description        |
+-------+--------------------+
| 14018 | Machiniste cinéma  |
+-------+--------------------+
1 row in set (0.06 sec)

mysql> SELECT * FROM job WHERE
SOUNDEX( description ) LIKE SOUNDEX('Machnste cinema');
+-------+--------------------+
| id    | description        |
+-------+--------------------+
| 14018 | Machiniste cinéma  |
+-------+--------------------+
1 row in set (0.06 sec)

mysql> 

答案 2

除非您非常确定用户真正想要导航到的URL,否则使用重写/重定向到特定URL是一个非常糟糕的主意。

以你的例子为例,假设你想处理每个可能被删除的字母的情况,URL的最后一部分有17个字符,即17 * 16 = 272个组合,虽然有可能将多个“false”url与一个正则表达式匹配,但你将需要很多重写规则。

更好的解决方案是,使用 PHP 实现 404 处理程序(因为您在 q 中包含了该标记),生成一个列表(例如)前 10 个 URL,其路径与请求路径的 levenstein 距离最短,以及默认链接和支持文本。(有基于mysql的实现 - 尝试谷歌的URL)。NB 处理程序仍应返回 404 状态 - NB HTML 内容必须超过最小长度才能抑制 MSIE 的“友好”错误消息。


推荐