我有一个相当大的网站,网站构建者将所有内部路径自动设置为小写(在页面本身,菜单等)。目前,我们还有其他网站链接到新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代码,最好将它挂钩到这样的东西?
答案 0 :(得分:1)
我认为hook_init()
在这个过程中会被调用得太晚(引导程序已经完成并且该点已经解决了路径)。您可能想要尝试hook_boot()
:
function mymodule_boot() {
$_GET['q'] = strtolower($_GET['q']);
}
将模块弹出安装到system
表后,将模块的weight
列设置为-1
,以确保在任何其他模块挂钩之前调用挂钩。然后刷新Drupal的缓存,你应该好好去。
请注意,搜索引擎会将http://www.example.com/alzheimers和http://www.example.com/Alzheimers视为具有重复内容的两个单独页面。理想情况下,您希望从旧页面到新页面进行301重定向,但这会更复杂,并且(我认为)将涉及实施hook_url_inbound_alter
。