【问题标题】:Redirecting 400 URLs with Apache [closed]使用 Apache 重定向 400 个 URL [关闭]
【发布时间】:2013-04-01 21:40:45
【问题描述】:

我需要永久重定向大约 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

编辑:添加示例

【问题讨论】:

  • 你可以使用正则表达式..你能发布一个新旧网址的例子吗?
  • @pandronic:有一些方法可以避免编写 400 次重写规则,但您需要告诉我们具体细节,例如新旧 URL 的小样本。
  • 我添加了一个通用示例。我们彻底重做了一个糟糕的网站,更改了很多产品和类别名称,因此新旧 URL 之间没有明显的模式。谢谢。

标签: apache .htaccess redirect mod-alias


【解决方案1】:

您可以创建一个 PHP(或任何其他)脚本来处理所有不存在的页面。它将检测旧 URL 并返回 301 重定向到新 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中更容易维护。

【讨论】:

  • 我希望避免编写脚本。如果我要添加 400 行“Redirect 301”会严重影响性能吗?
  • @pandronic 我认为它会影响性能,但不知道到什么程度..
  • +1 问题可能出在使用 mod_alias 时的查询上。我认为您的任何选择都是更好的解决方案。
猜你喜欢
  • 2023-03-18
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 2013-10-21
  • 2021-06-12
  • 2013-12-01
  • 1970-01-01
  • 2015-12-28
相关资源
最近更新 更多