新Drupal站点的大写外部链接获得404

时间:2011-12-21 16:02:10

标签: php apache mod-rewrite drupal-7 mod-speling

我有一个相当大的网站,网站构建者将所有内部路径自动设置为小写(在页面本身,菜单等)。目前,我们还有其他网站链接到新D7版本网站中数百到可能超过1,000个节点的旧(大写)版本。

所以http://www.example.com/alzheimers的链接工作正常,但如果我手动输入http://www.example.com/Alzheimers,我会转到我们的自定义404(我们的Drupal主题显示该消息)。这是一个问题,因为它是一个高可见性网站,有许多旧URL的外部链接。

网站建设者还尝试手动输入/Alzheimers/alzheimers的重定向,当然,这会创建无限重定向循环,黑洞,僵尸战争等。

我尝试使用apache“mod_speling”来处理这个问题,但没有成功,尽管我对这个mod没有丰富的经验。我想知道我是否可能遗漏某些东西/它是否需要针对大写变化的具体规则?我遵循的说明让我启用mod并重启Apache。它没有帮助。

所以我想知道我是否需要挂钩主题(hook_init?)来获取请求的URL并抛出一点PHP来将字符串设置为更低。有任何想法吗?我编码没有任何问题,但是如果有更简单的方法来处理这个问题,那么任何帮助都会非常受欢迎。

因为这对于任何为Windows编写并转移到Drupal或LAMP的网站来说都是一个典型问题,我不可能是第一个需要修复此问题的人。

如果需要自定义Drupal代码,最好将它挂钩到这样的东西?

1 个答案:

答案 0 :(得分:1)

我认为hook_init()在这个过程中会被调用得太晚(引导程序已经完成并且该点已经解决了路径)。您可能想要尝试hook_boot()

function mymodule_boot() {
  $_GET['q'] = strtolower($_GET['q']);
}

将模块弹出安装到system表后,将模块的weight列设置为-1,以确保在任何其他模块挂钩之前调用挂钩。然后刷新Drupal的缓存,你应该好好去。

请注意,搜索引擎会将http://www.example.com/alzheimershttp://www.example.com/Alzheimers视为具有重复内容的两个单独页面。理想情况下,您希望从旧页面到新页面进行301重定向,但这会更复杂,并且(我认为)将涉及实施hook_url_inbound_alter