您可以创建一个 PHP(或任何其他)脚本来处理所有不存在的页面。它将检测旧 URL 并返回 301 重定向到新 URL。
如果 regexp 无法解析旧 URL,则需要创建一个映射,如下所示:
$urlMap = array(
'/category1' => '/new-category1',
'/category2' => '/new-category2'
);
并从中查找新的 URL。如果 URL 不在地图中,则返回 404 标头或重定向到其他地方..
您可以使用该ErrorDocument
指令定义自定义 404 页面:
ErrorDocument 404 /process-urls.php
您可以从中获取路径$_SERVER['REQUEST_URI']
。
更新
正如@faa 所建议的,您可以使用RewriteMap
apache 指令。您需要创建一个txt文件,该文件将从旧 URL 映射到新 URL,每行一个映射,空格分隔:
/category1 /new-category-1
/category2 /new-category-2
然后,在您的虚拟主机文件中,声明地图:
RewriteMap examplemap txt:/path/to/file/map.txt
以及重写规则(可以放在.htaccess中):
RewriteCond ${examplemap:%{REQUEST_URI}|0} !=0
RewriteRule ^(.*) ${examplemap:$1|/not_found.html}
这种方法比将 400 条重写规则放入.htaccess更容易维护。