php - Drupal:动态质量 301 重定向

标签 php drupal redirect url-rewriting seo

我们有近十万条路径需要 301 重定向到新结构。像这样的东西:

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

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

这现在行不通了,因为域名没有改变,只是路径结构改变了。更改路径的数量接近 100,000 条标记,因此显然 Apache 读取 100,000 行 .htaccess 的概念对于每个页面加载都是荒谬的。

我很想知道如何以较低的性能成本正确地实现它。我不是要求你们提供现成的解决方案,只是帮助集思广益,在我们的用例中什么是最可行的解决方案。

我们还将在 Apache 前面有一个 Varnish 服务器来提供缓存内容,但我认为以下解决方案仍然有效,因为 Varnish 无法满足的请求会转发到我们 LAMP 环境中的 Apache。

我的想法是:

  • Drupal 7 有一个 html.tpl.php具有 <header> 的文件页面的一部分
  • 在执行 html.tpl.php 期间,我们将检查 MySQL 数据库以查看用户请求的路径是否存在于新的 pathalias 中。 table
    • 如果找不到路径并且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() 保存节点

干杯, 维沙尔

关于php - Drupal:动态质量 301 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8592465/

相关文章:

PHP - MySQLi 准备好的语句

PHP/MYSQL并发

css - IE 页面布局随机中断?

codeigniter - 重定向变量

php - 付款单上的自定义自动增量

drupal - 如何在 drupal 7 中呈现评论线程

php - Drupal负载平衡

angular - 打开模式时留在同一页面

java - 在 PlayFramework 1.2.x 中将 example.com 重定向到 www.example.com

php - 显示 mysql 数据库的统计信息