2010-11-10 70 views
0

我一直試圖讓wikipedia風格的語言的東西工作。所以,英文網址爲en.example.com,法文網址爲fr.example.com ......這樣做很好,但是我希望管理區域始終默認爲基本語言,即不設置LANGUAGE環境變量。我試過添加RewriteCond %{REQUEST_URI} !^admin [NC],但它似乎沒有效果。RewriteCond排除一個目錄和它的子目錄

我的mod_rewrite代碼如下:

# Handle languages 
# Picks up the language code from the browser accept-language parameter 
RewriteCond %{HTTP:Accept-Language} ^([a-z]{2}).*$ [NC] 
RewriteCond %{HTTP_HOST} !^[a-z]{2}\.[a-z]{2,}\. [NC] 
RewriteRule ^(.*)$ http://%1.%{HTTP_HOST}/$1 [R=301] 

RewriteCond %{REQUEST_URI} !^admin [NC] 
RewriteCond %{HTTP_HOST} ^([a-z]{2})\.[a-z]{2,}\. [NC] 
RewriteRule ^(.*)$ - [ENV=LANGUAGE:%1,QSA] 

# Redirecting all requests to one script 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([\+a-zA-Z0-9,%\(\)\_\ -/]+)$ /index.php [NC,L,QSA] 

感謝您的幫助,我敢肯定這件事情非常愚蠢,這是錯誤,像往常一樣。

+0

請嘗試將整個GET重新格式化你的'代碼'圍繞一個代碼塊 – superfro 2010-11-10 17:09:24

+0

好吧,怎麼樣...這很奇怪,因爲它在預覽中看起來很好 – ianbarker 2010-11-10 17:27:06

回答

2

你的問題是,REQUEST_URI不以管理員開頭,它的前面會有一個斜槓......如果你沒有重寫基地,它可能以/ admin開頭......所以你可以改變它!^/admin或只是管理員或管理員/如果所有的代碼是在foo.com/admin/*

REQUEST_URI將是像「/foo/bar.html」

+0

我試過所有這些。我也認爲它會以a開頭。然而,他們似乎都沒有停止設置的語言變量,就好像'RewriteCond'被忽略,或者似乎從未匹配。 /admin /中沒有代碼/整個結構是虛構的 – ianbarker 2010-11-11 09:14:09

+0

爲什麼不嘗試一些簡單的...例如 RewriteCond%{REQUEST_URI}!admin [NC] RewriteRule ^(。*)$ $ 1?not_admin = 1 [R,L] 如果它重定向,當你有管理員在那裏,而不是當你沒有管理員那裏時,規則工作正常......也許你需要盲目設置語言環境變量到默認的第一個,也許它保留了自上一個進程以來的值,因爲它們被重用了線程? – superfro 2010-11-11 14:59:40

+0

我認爲你是正確的,它保留了最後一道工序的價值,如果我刪除了'RewriteRule ^(。*)$ - [ENV = LANGUAGE:%1,QSA]'下面的RewriteRule ('RewriteRule ^([\ + a-zA-Z0-9,%\(\)\ _ \ -//] +)$ /index.php [NC,L,QSA]')不運行。看起來我可能不得不檢測這是在PHP管理 – ianbarker 2010-11-12 10:25:39