2009-02-03 20 views
13

Windows文件系統(FAT,NTFS)不關心文件名的大小寫(不區分大小寫)。因此,在Windows上運行的程序(如Apache Web服務器)可處理文件不區分大小寫。我可以讓在Windows上運行的Apache區分大小寫嗎?

當您在Windows上創建網站時,您會無意中創建與實際文件名不一致的鏈接等。除非將網站部署到區分大小寫的文件系統(在Linux,UNIX,...上默認),否則您通常會注意到這些錯誤。

現在,我想知道是否有辦法避免這種類型的錯誤使Apache Web服務器以某種方式關心案例,即使文件系統不關心。我的意思是NTFS在文件名中的大寫和小寫字母之間有所不同,所以理論上可以檢查文件名是否以區分大小寫的方式匹配。


我知道,像命名約定「只使用小寫」可以幫助避免這些類型的問題,但是,這並不與現有文件的幫助和不太方便,:-)

而且,不使用Windows不是一個選項。我不主動使用Windows,並且在這種情況下不可能在不同的平臺上運行Apache。

回答

3

據我所知你不能,但我會看這個問題的其他答案。

作爲一種解決方法,您說您必須在Windows上開發。在虛擬PC中安裝Linux怎麼樣?有幾個免費的VM程序,如VirtualBoxMicrosoft Virtual PC。這樣,您就可以將開發環境與您的部署環境相匹配。

除此之外,我發現最好只是確保您使用小寫字母,儘量減少錯誤。

+1

我也有過使用虛擬化軟件(VMware等)在Linux上運行Apache的想法,我希望得到這樣的答案。但是,什麼錯誤的是,恕我直言,它應該可能在Windows ... – f3lix 2009-02-03 14:27:27

0

看來你可以在Apache配置文件中啓用帶有指令CheckSpelling的mod_spelling。

信息和上下文這裏找到: http://bytes.com/topic/apache/answers/608164-apache-case-sensitive-urls

編輯:上述被引述了問題的反面,我很抱歉。有人提出了同樣的問題,但是如果答案有效,則不會迴應。在進一步觀察之後,在apache本身中似乎沒有標誌或任何設置來執行此操作。有人建議儘可能使文件系統區分大小寫,但看起來它會導致更多的問題,特別是對於其他不期待這樣的程序。

總體而言,如果您無法在另一個操作系統上開發,並且無法通過並將所有現有文件名更改爲小寫字母(這是可以理解的),那麼看起來您並沒有多少選擇。我現在提供的唯一建議是嘗試獲得一個測試環境,與生產環境完全一樣,並在發送到生產環境之前儘可能進行測試。

對不起,誤會,我不能有更多的幫助。

+0

在這個線程的問題是「我怎樣才能讓Apache **情況下,敏感的**嗎?」 mod_spelling「糾正拼寫錯誤。用戶可能輸入的URL,忽略大小寫**以及允許最多1英里「 簡而言之,這是針對希望Windows行爲的Linux用戶的... – f3lix 2009-02-03 14:15:22

+0

您所指的論壇不提供使Windows上的Apache區分大小寫的解決方案。只有反過來;在unix系統上不區分大小寫。 – bouke 2009-02-03 15:07:44

+0

你能否做到這一點?論壇確實在下面提到了你要找的內容,我引用的這個答案是這樣的,但這個人從來沒有回來過,並說過它是否有效。你試過了嗎?我仍在看。 – 2009-02-03 15:14:27

0

NTFS實際上確實支持區分大小寫的文件名。它由Microsoft的Services for UNIX使用和啓用。 它在註冊表中被控制。 在「ObCaseinSensitive」註冊表項上執行google操作。 例如msdn blog 特別是這個微軟知識庫文章:kb817921

0

這不是一個問題,你可以解決你想要的方式。您需要通過強制小寫來上傳文件。您將避免Windows上的命名衝突問題,因此如果您在Windows上構建事物,則不必擔心這一點。現在,您需要使用某種鏈接檢查程序來查找包含大寫字母的URL,然後替換爲小寫字母。

但是,瑞安吉爾確實提出了一個很好的建議來啓用CheckSpelling。

0

Windows可以設置爲區分大小寫模式。 NTFS卷也支持區分大小寫模式。如果您之前安裝了UNIX互操作性,則您的Windows可能已經轉爲區分大小寫模式。我相信在註冊表中有一個轉換,但我忘記了它在哪裏,所以我無法爲你找到它。 :-(

2

根據Apache文檔,這是不可能的,因爲大小寫不敏感是嵌入在Windows操作系統中的 但是你可以「反轉問題」並將Linux/Unix下的Apache服務器不區分大小寫。下面的指令到你的.htaccess:

RewriteEngine On 
RewriteMap lowercase int:tolower 
RewriteCond %{REQUEST_URI} [A-Z] 
RewriteRule (.*) ${lowercase:$1} [R,L] 

參見文檔here

相關問題