我在我的.htaccess文件中遇到了一個非常基本的正則表達式問題,我希望有人能夠說明一些問題。基本前提是我想教Apache將任何.html擴展名切換爲.var擴展名。我曾經認爲這個規則會顯得微不足道:在RewriteRule中造成頭痛
RewriteRule ^([^.]+)\.html$ $1.var
但是[^。]部分根本不起作用。奇怪的是,它的工作原理是這樣的
RewriteRule ^([^A-Z]+)\.html$ $1.var
我不明白爲什麼後者的規則有效。假設我正在尋找名爲「index.html」的文件,那麼$ 1應該匹配到「索引」。和「.html」位應該實際上不匹配。
爲了擴大這個問題的範圍,我實際上正在絞盡腦汁想如何實現一個多語言網站。我不喜歡Apache的MultiView選項,因爲它強制我的平面目錄結構具有許多開發工具無法識別的文件擴展名。我可以去.var類型地圖路線,但我發現Apache的默認配置不支持這一切都好(因此我的遊覽到正則表達式土地)。所以,當我使用mod_rewrite時,我想我可能會走完整個豬圈:每當收到一個name.html文件的請求並且該文件不存在時,檢查是否存在XX/name.html文件,而不是「XX」是根據用戶喜好的語言代碼。
這會給我一個整潔的目錄結構,雖然它可能不會像.var方法那樣執行,在用戶瀏覽器的語言首選項不被我的站點支持的情況下(在這種情況下.var會取代EN或類似的)。
有什麼想法?謝謝。
好吧,我發現我一直是一個白癡。你的回答非常正確。唉,我沒有考慮我的(無條件的)RuleRewrite的影響:一旦我將index.html變形爲index.var,Apache的類型映射就跳入了操作中,並查看index.var文件中的資源進行映射。它將DE/index.html拉出帽子。然後,Apache將DE/index.html接受另一個重寫過程,最終將該名稱改爲DE/index.var。而那個文件則不存在。不計算精彩:-))) – Ollie2893 2010-03-09 10:18:50
糟糕:)好的偵探工作。 – 2010-03-09 10:41:54