2012-03-26 40 views
0

我試圖符合一定的規則只有當不存在「區域設置」中的查詢字符串.htaccess的條件

下面是我這樣做:

RewriteCond %{QUERY_STRING} !locale 
RewriteRule ^acceuil$ home.php?locale=fr [NC,L] 
... (More rewrite rules) 

基本上我想/acceuilhome.php?locale=fr(工作完美)

除此之外,如果莫名其妙的鏈接是這樣/acceuil?locale=en我想使它而不是去到/home這相當於home.php?locale=en

任何機會重寫讓我們說「/acceuil」以下列方式:

if(isset($locale)) { 
     go to home.php?locale=$locale 
} 
else{ 
     go to home.php?locale=fr 
} 

而且我想知道如果條件應該是複製每個規則之前粘貼?

請讓我知道這是可能的,我怎麼能得到它去,如果你有一些htaccess的有益的參考重寫,請分享:)

感謝

+0

如果是法語,那麼它**'Accueil' **,*不*'Acceuil' :) – 2012-03-27 05:35:04

回答

1

這裏是一個應該工作的一般規則,並確保在GET變量是locale(不localeee既不llllocale):

RewriteCond %{QUERY_STRING} (^|&)locale=([a-zA-A]+)(&|$) 
RewriteRule ^acceuil$ home.php?locale=%1 [L,NC,QSA] 

# if locale = en ... 
RewriteCond %{QUERY_STRING} (^|&)locale=en(&|$) 
# ... and it goes to home.php then go back to /home: 
RewriteRule ^home.php$ /home [L,NC,QSA] 

注:如果是法國人那麼它的Accueil,不Acceuil :)

+0

謝謝感謝您的幫助和thx爲趕上錯字:) – 2012-03-27 14:08:48

+0

歡迎你,我的榮幸**:)** – 2012-03-27 14:13:15

1
RewriteCond  %{QUERY_STRING} !locale 
RewriteRule  ^acceuil$    home.php?locale=fr [L,NC] 
RewriteCond  %{QUERY_STRING} locale=([a-zA-Z]{2}) 

RewriteRule  ^acceuil$    home.php?locale=%1 [L,NC] 

編輯:
第一個條件只是檢查查詢字符串中是否存在local。如果不是,則將URL重寫爲home.php?locale=fr,如果存在locale=,則需要後面的內容(只有兩個字符)並將它們放在home.php?locale=%1中,因此acceuil?locale=fr表示home.php?locale=fr。而acceuil?locale=en意味着home.php?locale=en

有兩個條件和兩個重寫規則:-D

+0

感謝您的快速回復!通過這個邏輯我明白,條件只適用於一個規則,我是對嗎? – 2012-03-27 03:25:54

+0

閱讀新增部分 – undone 2012-03-27 05:45:13

+0

謝謝!真的很難挑選最好的答案 – 2012-03-27 14:10:06