繁体   English   中英

Drupal:动态质量301重定向

[英]Drupal: Dynamic mass 301 redirecting

我们有近十万条路径需要301重定向到新结构。 就像是:

 lang.site.com/section/subsection/article
                  -> 
 lang.site.com/newsection/newsubsection/article

过去,当从domain.com迁移到newdomain.com时,我们只需要放置一个.htaccess文件,其中包含10k +脚本生成的行,将旧路径与新路径匹配,就可以了。 它不会影响新域的性能,因为.htaccess仅在用户尝试访问旧域时由Apache读取。

现在这将无法工作,因为域名没有更改,只能更改路径的结构。 更改路径的数量接近10万个标记,因此很明显,Apache为每个页面加载读取10万行.htaccess的想法是荒谬的。

我很想知道一些如何以较低的性能成本正确实现这一点的想法。 我并不是要你们提供现成的解决方案,只是在集思广益中提供一些帮助,这将是我们用例中最可行的解决方案。

我们还将在Apache的前面放置一台Varnish服务器来提供缓存的内容,但是我想以下解决方案仍然可以使用,因为Varnish无法满足的请求将在我们的LAMP环境中转发到Apache。

我的想法是:

  • Drupal 7有一个html.tpl.php文件,该文件具有页面的<header>部分
  • 在执行html.tpl.php ,我们将检查MySQL数据库以查看用户请求的路径是否在新的pathalias表中
    • 如果找不到路径,并且找到old path <-> new path关系:
      • PHP header('Location:'); 到301,将用户重定向到正确的新位置
    • 其他:
      • 让Drupal照常处理请求并继续执行

我们还被告知要更新旧的域重定向,以不带301链接的方式将用户直接带到新站点。 我想我们可以利用相同的数据库检查来查看最旧路径与通过旧路径的最新路径之间是否存在关系。 幸运的是,我们已经存储了所有这些甚至更旧的关系,以防万一,现在它们可以派上用场了。

如果您通读过任何有关如何以最佳方式解决此问题的想法,将不胜感激:)

这就是我会尝试的

1)简单的方法。

试用模块http://drupal.org/project/pathauto

您可以为模块定义模式。

lang.site.com/newsection/newsubsection/article

lang.site.com/[node:newsection]/[term:newsubsection]

// This is an example not the actual pattern u will use. If you can't seem to get this then 
revert back.

仅在cron作业期间创建路径。 因此您的表现不会受到影响。

2)否则上述方法应该足够好。 您可以编写一个模块并实现以下逻辑

A-hook_cron()//在每次执行cron时,都应运行以下命令B-使用node_load()加载节点C-检查节点的uri是否与您的模式D-如果不匹配,请进行更改。 E-使用node_save()保存节点

欢呼雀跃

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM