2010-11-13 51 views
0

背景
我有一個Rails應用程序,其中我的主頁是產品/索引。301重定向,但不包括命名空間

我在.htaccess文件中使用以下代碼將請求從產品/重定向到root。

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*products\ HTTP/ 
RewriteRule ^(.*)products /$1 [R=301,L] 

這很好。 /產品請求重定向到根目錄,並且對產品/ [id]的請求仍然按照我的意願路由到產品/ ID。

問題
唯一的問題是,我有與命名空間/管理員的管理部分。並在該管理部分,我有/產品。
所以,現在當我的管理員用戶在網站的管理部分,他點擊「產品」鏈接,他應該被路由到網址/管理/產品。然而,重寫規則被重定向他URL /管理

問題
如何排除來自重定向代碼我上面列出的管理前綴?

我想在正則表達式的某個地方我應該可以添加如下內容:[^ admin] 但我無法獲得任何工作。

謝謝。

回答

0

添加另一個改寫條件像這樣開始:

RewriteCond %{REQUEST_URI} !^admin

這將禁用以下重寫規則開始與管理員的任何請求。

+0

幾乎就是這樣。它只需要一個小小的調整:RewriteCond%{REQUEST_URI}!^(。*)admin – MikeH 2010-11-13 10:28:20

+0

你的調整使得這種自我毀滅的大量表達式。這個上下文中的'^'字符是從行的開頭匹配的。你的調整現在匹配行的開始,然後是任意數量的隨機字符。如果您的管理員是在網址開頭的那個,那麼要麼與開頭的內容匹配,要麼放棄'^'並且匹配請求中的任何地方。換句話說'^(。*)'完全等同於沒有任何東西。 – Caleb 2010-11-13 10:38:20