2010-01-04 49 views
16

我想對於是否存在這些文件不觸及現有的文件,這樣做對其他可能的情況下,查找和發現任何URL,如果是這樣,302給他們。不區分大小寫的網址與mod_rewrite的

如果這是不可能的,那麼我確定這些妥協:

  • 只檢查小寫版本
  • 只檢查第一路部分

例如http://example.com/CoOl/PaTH/CaMELcaSE應該重定向到http://example.com/cool/path/camelCase(假設後者存在)。

但當然,一個完整的解決方案是更爲有用的我和其他人

+1

我寧願使用一個301比302 – Gumbo 2010-01-04 08:23:45

回答

20
CheckSpelling on 

匹配文件和目錄。有關詳細信息,請參閱documentation

+0

最近的版本是否有相應的版本? – icedwater 2013-10-04 04:23:49

+0

@icedwater它仍然在工作。 – fuxia 2013-10-04 05:22:41

+0

似乎沒有這樣的方式;我在Ubuntu $ 12.04 LTS,Apache 2.2.22中創建符號鏈接,並且在'$ APACHE/mods-enabled /'中創建了speling.load和speling.conf的符號鏈接,但似乎不允許出現錯誤大小寫的文件夾名稱。 (當然,speling.load和speling.conf被設置...也許我應該發表另一個問題。) – icedwater 2013-10-04 07:47:24

0

中查找Apache模塊mod_negotiation模塊。它正是你想要的: http://httpd.apache.org/docs/2.0/mod/mod_negotiation.html#multiviews

你也可以管理所有的請求到一個PHP文件,並讓PHP文件爲你做檢查。

+0

這已經很接近,但似乎主要是用於添加擴展。就像'foo'的請求變成'foo.xml'或'foo.html'一樣。我正在嘗試修復拼寫錯誤。 – 2010-02-02 07:03:48

4

我沒有Apache的方便測試,但這些規則的某種組合應該做你想要什麼:

 
RewriteEngine on 
RewriteMap lower int:tolower 
RewriteCond ${lower:%{REQUEST_URI}} -U 
RewriteRule [A-Z] ${lower:%{REQUEST_URI}} [R=302,L] 
  • 小寫的地圖轉換/事/東西
  • 的條件看是否REQUEST_URI的小寫存在(-U是Apache內部查詢)
  • 實際做重寫規則

我不知道RewriteMap是否可以在條件中應用,或者它只適用於規則。這些基於experts exchange accepted answera small orange forum discussion

你的「理想」的解決方案可能是不可能的,除非你能列舉您網站上的每一個有效的網頁。如果您只有幾個有效頁面,則RewriteMap和文本地圖的組合將完全符合您的需求。如果有數百/數千頁,則可能需要編寫腳本並使用prg指令。

如果你不能確定每一個有效的頁面,你就需要嘗試的情況下,每一個變種。將URL看作二進制字符串,其中0代表小寫字母,1代表大寫字母。從你的簡單例子中,你將不得不測試2^17變化,128k頁。