我需要永久重定向大约 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
编辑:添加示例
您可以创建一个 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更容易维护。