-2

我需要永久重定向大约 400 个 URL。最好的方法是什么?最明显的解决方案是将 400 行“重定向 301 old-url new-url”添加到 .htaccess。有没有更好的办法?

示例网址:

其中 50 个:

/category -> /new-category-name-c/

其中大约 350 个:

/category/subcategory/product.html -> /slightly-different-product-name.html

编辑:添加示例

4

1 回答 1

1

您可以创建一个 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 所建议的,您可以使用RewriteMapapache 指令。您需要创建一个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更容易维护。

于 2013-04-10T08:05:01.910 回答