2010-09-05 79 views
1

我有這樣的規則:mod_speling內部重定向,或如何處理與瓶蓋的mod_rewrite

RewriteRule ^(panel|admin|site)/([A-Za-z0-9]+?)/(scripts|assets)/(.*)$ Project/$2/Public/$3/$1/$4 [L] 

的想法是允許訪問的公共資產,因爲它們存在的代碼中的模塊。唯一的問題是命名方案需要標題案例(讓我們假設這是不可改變的)。因此,一個請求:

/site/users/scripts/myscript.js 

返回404,但:

/site/Users/scripts/myscript.js 

作品。

我試圖使用mod_speling對付外殼的問題,但是mod_speling做一個完整的重定向,而不是一個內部的,因此URL給最終用戶的變化:

/Project/Users/Public/scripts/myscript.js 

這是沒有好。這意味着我的目錄結構有點暴露,這意味着我需要一個額外的重寫規則來傳遞它。

有沒有辦法更好地處理mod_rewrite中的大寫字母,即不使用RewriteMap? (需要保持在.htaccess中的一切)

另外,有沒有辦法改變mod_speling使用內部重定向?

回答

0

處理mod_rewrite中的大寫更優雅,即不使用RewriteMap?

在我看來,你可以使用內部映射函數tolower,並且不需要任何外部文件。或者我錯過了什麼?

編輯:哈克答案是每個AZ的26個重寫規則爲第一個字母和替代使用小寫字母......或者每字的規則(如用戶),可以出現在URL

+0

由於某些未知原因,在使用它們之前(例如'RewriteMap tolower int:tolower'),您必須手動定義內部'RewriteMap'函數,這涉及編輯服務器/虛擬主機配置。這是不幸的,因爲這絕對是這裏工作的最佳工具。 – 2010-09-06 17:28:01

+0

是的,這是我一直在跑的牆。 :(我們部署在各種各樣的服務器上,我通常沒有那麼多的訪問權限,所以我不能假設我有它。 – jhogendorn 2010-09-07 00:50:39

+0

我打算把這個標記爲正確答案,它並不是真的「正確」在回答這個問題的標準時,但由於這是不可能的,所以這個答案就近了:) – jhogendorn 2011-03-10 23:09:07