2

我有一个相当大的网站,网站建设者将所有内部路径自动设置为小写(在页面本身、菜单等中)。目前,在新的 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 代码,最好将它挂在哪里?

4

1 回答 1

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.

于 2011-12-21T17:37:23.127 回答