2011-12-21 50 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