2012-10-23 36 views
2

我的任務是將舊的動態網站從Windows服務器遷移到Linux。該網站最初是寫在不考慮字符的情況下。一些文件名全部是大寫,小寫和一些混合。當然,這在Windows中從來都不是問題,但現在我們正在轉向區分大小寫的文件系統。Apache mod_speling錯誤地「糾正」URL?

一個快速查找/重命名命令(感謝另一個教程)得到的文件名都是小寫的。

但是,代碼中的許多URL引用仍然指向這些混合大小寫的文件名,所以我啓用了mod_speling來解決此問題。它似乎大部分工作正常,除了一個頁面:我有一個文件名haematobium.html,每次鏈接指向.../haematobium.html時,它將在瀏覽器中被重寫爲.../hæmatobium.html

我不知道這個奇怪的字符是如何進入文件名的,但我已經修正了HTML文檔中的代碼,現在鏈接到haematobium.html,然後將haematobium.html文件重命名爲匹配。

當Chrome瀏覽器請求.../haematobium.html,它「校正」,以.../hæmatobium.html在地址欄,並顯示錯誤說「所請求的URL .../hæmatobium.html此服務器上找到。」

在IE9中,我被要求登錄(這是一個.htaccess保護的頁面),我輸入它,然後如果將URL轉發到.../h%C3%A6matobium.html,這又不會加載。

在我的沮喪中,我甚至將haematobium.html複製到hæmatobium.htmlhæmatobium.html,但仍然沒有實際加載這三個頁面。

所以我的問題:我讀了一個地方,mod_speling試圖「學習」拼寫錯誤的網址。它實際上是否重命名文件(是否有奇怪的字符可能來自哪裏)?它是否保留了所要求的緩存,以及它被轉發到的內容(我可以清除的緩存)?

PS。還有許多MySQL數據庫表和字段的混合大小寫引用,但這是一個完整的'噩夢。

+0

你在配置中有'CheckSpelling Off'嗎? – Gabe

回答

1

[無法迴應還,因此,回答]

你的問題並不能使它完全清楚這兩個名字(兩個字符AE [ASCII],或一個連字字符æ [統一])爲血吸蟲的.html實際上存在於你的Apache文件系統中。

嘗試在你的shell執行以下操作:

$ echo -n h*matobium.html | hd 

輸出應該是以下兩種方式中的任一種。這是ASCII,61和65爲一個ë,分別爲:

00000000 68 61 65 6d 61 74 6f 62 69 75 6d 2e 68 74 6d 6c |haematobium.html| 
00000010 

而這是Unicode,與C3 A6爲單個字符æ

00000000 68 c3 a6 6d 61 74 6f 62 69 75 6d 2e 68 74 6d 6c |h..matobium.html| 
00000010 

我會推薦使用ASCII版本,它使生活變得相當容易。

現在你真正的問題。 mod_speling既不「學習」,也不重命名或緩存其數據。緩存既可以由您的瀏覽器完成,也可以通過瀏覽器與服務器之間的代理完成。

實際上,最好的做法是使用命令行工具(如wgetcurl)測試這些案例,這些工具應該已經可用或可以在任何Linux上輕鬆安裝。

使用wget -Scurl -i實際查看您的Web服務器發送的響應頭。