【问题标题】:How to implement url page redirection for a massive huge website大型大型网站如何实现url页面重定向
【发布时间】:2015-12-05 18:52:39
【问题描述】:

我的网站,例如carparts.co.uk 有 355000 个独特的网址。 (这是一个汽车零件目录网站)(在网站管理员工具上显示其中有 174000 个已编入索引)

我们想将我们的网站移动到一个新的购物车平台 (prestashop),并彻底改变了目录的结构,这意味着我们现在有了一组新的 url。 (虽然主域没有改变,仍然是 carparts.co.uk) 我现在有一个 excel 表,其中有一列 355000 个“旧”url 与新目录上最接近的等效 url 匹配。 例如

old url: "carparts.co.uk/ford-ranger-alternator belts.htm"
goes to: "carparts.co.uk/belt-drive"

(并且有 355,000 个类似的重定向)

我的问题是我应该怎么做? 我知道您可以使用 htaccess 来执行此操作,但我很担心,因为我已经读过如果 htaccess 非常大,它会减慢网站的速度(这种缓慢是否仅在尝试访问其中一个旧网址时才会出现?,或者它会影响我所有网址的速度吗?

那么对我来说,处理这么多的 URL 最好的办法是什么?

【问题讨论】:

  • will it impact the speed of all my urls? 是的,使用 .htaccess 会降低整个站点的速度,因为它必须在每个页面请求时读取 .htaccess 文件。如果您访问服务器配置,最好将它们放置在那里,这样可以减少对性能的影响。

标签: apache .htaccess url redirect


【解决方案1】:

您最好的选择可能是设置 RewriteMap。这需要服务器 vhost 配置访问权限,因为您无法从 htaccess 文件配置地图(尽管您可以使用一个)。映射由 apache 缓存,因此您无需担心持续的文件访问。

简单的:

RewriteMap redirects txt:/full/path/to/redirect-map.txt

那么在文件redirect-map.txt 中就会有一个“from”和“to”:

"ford-ranger-alternator belts.htm" belt-drive
old-url.htm new-url
etc...

然后在您的 htaccess 文件或 vhost 配置中,只需执行以下操作:

RewriteCond $(redirects:$1|0) !=0
RewriteRule ^(.*)$ $(redirects:$1) [L,R]

【讨论】:

  • 很好的解决方案,但如果 OP 可以访问它,我仍然会推荐 config vs .htaccess。
【解决方案2】:

使用 htaccess 会减慢网站速度,因为它需要为每个请求检查多个文件,并且每个请求都会动态检查这些文件。

对于深度路由站点来说,这更是一个问题。例如,请求:

www.example.com/folder1/folder2/folder3/folder4/index.htm

需要检查

  • 主配置文件。
  • 然后在文档根目录中添加任何覆盖 htaccess 文件。
  • 然后在 folder1 htaccess 文件中添加任何覆盖。
  • 然后在 folder2 htaccess 文件中添加任何覆盖。

...等等。

但是,如果您没有深度嵌套,那么它还不错。仍然比不使用它们要慢,但在大多数网站上可能并不明显。

htaccess 在这里为您带来的好处意味着您不需要将所有重定向放在一个地方,并且可以将它们拆分到 htaccess 文件中。我不确定将 355,000 个重定向添加到主要 Apache 配置的影响,但这是一个公平的数字,所以想象一下它可能会对性能产生影响。另一方面,htaccess 文件是在发出请求时动态读取的,因此不需要将所有重定向加载到 Apache 中。

因此,这可能是 htaccess 可能是更好解决方案的少数用例之一,即使您确实可以访问主配置文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 2014-04-04
    相关资源
    最近更新 更多