2011-11-30 120 views
1

我正在使用的.htaccess下面的代碼來改變我的網站的語言:匹配正則表達式模式

RewriteRule ^en/?(.*) $1?locale=en_GB [QSA,DPI,L] 

所以要顯示的頁面爲mysite.com/en/index.php但事實上地址爲訪問者mysite.com/index.php?locale=en_GB

我使用正則表達式是不完全正確,但是,因爲我得到試圖訪問mysite.com/en/enquiry.php(或mysite.com/ru/enquiry.php,或任何其他語言也如此)當一個404錯誤。

即使讀取信息時regular-expressions.info和維基百科,以及使用各種JavaScript的正則表達式助手後,我不知道如何得到它的匹配enen/en/dir/pagename.php,而忽略了與這樣en開頭的任何單詞enquiryenquiry-send.php

什麼正則表達式,我應該使用,使任何下列地址的正常工作(這是幾個例子 - 頁面名稱可以包含連字符-或下劃線_):

mysite.com/en 
mysite.com/en/ 
mysite.com/en/index.php 
mysite.com/en/enquiry.php 
mysite.com/en/enquiry-send.php 

謝謝。

編輯

我有工作使用下面的表達式:

RewriteRule ^en(/?$|/(.*)) $1?locale=en_GB [QSA,DPI,L] 
+0

現在無法驗證,但'^/en /(.*)$ $ 1?locale = en_GB' – Viruzzo

+0

不確定這是否行得通,因爲'en'後可能有也可能不是正斜槓。 – Chris

+0

僅適用於'mysite.com/en';但是,你可以刪除它。 – Viruzzo

回答

1
RewriteEngine On 
RewriteBase/
RewriteRule ^en/?$ index.php?locale=en_GB [L,QSA] 
RewriteRule ^en/([^?]*) $1?locale=en_GB [L,QSA] 

,將符合所有測試的網址,併發送en單獨到index.php文件

+0

輝煌,謝謝你的簡潔回答 – Chris

+0

沒問題,沒有測試過,所以請確認之後再測試。也可能想測試在方括號標誌中添加DPI,我從來沒有必要使用它,並且不確定它會有什麼效果 –

-1

它的作品

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase /test/ 
RewriteRule ^en/(.*) $1?lang=en_GB [L] 
+1

你也可以將QSA放在方括號中,這樣任何URL參數都會包含'[L,QSA]' –

+1

事實上,上面的大部分都不會做任何事情。重寫庫不正確,參數應該是locale而不是lang –

+0

這段代碼工作正常 –