Drupal:动态质量301重定向

时间:2011-12-21 15:47:16

标签: php drupal redirect url-rewriting seo

我们需要将近十万条路径重定向到一个新结构。类似的东西:

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

过去从domain.com迁移到newdomain.com时,我们只会将一个.htaccess文件与10k +脚本生成的行匹配旧路径到新路径,并且它可以正常工作。它不影响新域的性能,因为当用户尝试访问旧域时,只有Apache读取.htaccess

现在这不起作用,因为域名不会改变,只有路径的结构。改变路径的数量接近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 个答案:

答案 0 :(得分:-1)

这就是我想要的

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()

保存节点

干杯, 维沙尔