2011-12-21 31 views
2

我有一个相当大的站点,其中站点建设者的所有内部路径自动设置为小写(在页面本身,菜单等)。目前,我们还有其他站点链接到站点的新D7版本中的数百至1,000个以上节点的旧(大写)版本。大写外部链接到新的Drupal站点获得404

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

的sitebuilders还试图手动输入的/Alzheimers重定向→/alzheimers,当然,这创造了一个无限的重定向循环,黑洞,大战僵尸等

我试图用Apache来处理这个“mod_speling “,但没有成功,尽管我对这个mod没有丰富的经验。我想知道我是否可能错过了某些东西/它是否需要特定的大写更改规则?我遵循的指示让我启用mod并重新启动Apache。它没有帮助。

所以我想知道如果我需要钩入主题(hook_init?)来获取请求的URL并抛出一个小小的PHP来设置字符串较低。有任何想法吗?我没有任何编码问题,但如果有一种更简单的方法来处理这个问题,任何帮助都将受到极大的赞赏。

由于这是任何为Windows编写的站点的典型问题,并且一般会转移到Drupal或LAMP,所以我不可能成为第一个需要修复此问题的人。

如果需要自定义Drupal代码,哪里最好把它挂在这样的东西?

回答

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

+0

优秀的答案。我也在考虑使用hook_boot,但我想我已经在某处读过其中一个没有在缓存页面上运行的东西,所以我认为为什么我认为hook_init会是一个更好的选择。 – amatusko 2011-12-22 05:25:59

+0

呃。对不起,我是这种格式的新手。丢失的编辑。我喜欢将模块重新排列到top + 1的方法。我希望我有足够的repz来upvote你的答案。\ n所以我有一个请求,应该通过Apache进入我的服务器,但它显然被Drupal截获之前,或这是不可能的,因为Drupal内部运行在Apache中运行的PHP(可以这么说)。我无法理解drupal如何覆盖我的服务器设置。 (续) – amatusko 2011-12-22 05:33:53

+0

具有讽刺意味的是,当网站构建者试图使用drupal的mod系统将重定向从/ Alz页面添加到/ alz页面时,他得到了旧的无限重定向循环错误业务。 – amatusko 2011-12-22 05:33:59