2010-06-24 230 views
0

我想执行的htaccess以下规则的一部分:htaccess的重写只查询字符串

www.domain.com/folder/?id=14077&c=en-gb -> www.domain.com/folder/?id=14077 
www.domain.com/folder/?c=en-gb&ID=14077 -> www.domain.com/folder/?id=14077 
www.domain.com/folder/?id=14077&c=fr-fr -> www.domain.fr/folder/?id=14077 
www.domain.com/folder2/?c=fr-fr&ID=14077 -> www.domain.fr/folder2/?id=14077 
www.domain.com/folder2/?c=en-us&ID=14077 -> www.domain.us/folder2/?id=14077 

基本上取出查询字符串的“C”的一部分,它重定向到一个新的域的基础上,以下规则:

c=en-gb -> www.domain.com 
c=fr-fr -> www.domain.fr 
c=en-us -> www.domain.us 

任何帮助欢迎!

回答

1

诚然,我不知道这是最好的mod_rewrite解决的任务......但什么是地狱,为什么不:

(不完全测试,但它似乎运作良好)

RewriteEngine On 
RewriteCond %{QUERY_STRING} (.*)(\A|&)c=([A-Za-z\-]+)&?(&.*)?$ 
RewriteRule .* - [E=SWITCHLANG:%3,E=QSONE:%1,E=QSTWO:%4] 

RewriteCond %{ENV:SWITCHLANG} =en-gb [NC] 
RewriteCond %{HTTP_HOST} !(.*)\.com$ 
RewriteRule (.*) http://www.domain.com/$1?%{ENV:QSONE}&%{ENV:QSTWO} 

RewriteCond %{ENV:SWITCHLANG} =fr-fr [NC] 
RewriteCond %{HTTP_HOST} !(.*)\.fr$ 
RewriteRule (.*) http://www.domain.fr/$1?%{ENV:QSONE}&%{ENV:QSTWO} 

RewriteCond %{ENV:SWITCHLANG} =en-us [NC] 
RewriteCond %{HTTP_HOST} !(.*)\.us$ 
RewriteRule (.*) http://www.domain.us/$1?%{ENV:QSONE}&%{ENV:QSTWO} 
+0

太棒了,我已经放弃了实现这一目标的希望! – 2010-06-25 13:18:12