2013-08-18 108 views
1

我有一堆域可能會帶或不帶www。有了這些域名,我想重定向他們,如果他們移動到m.domain.com。如果我做1域,它的工作。例如:mod_rewrite多域名重寫域名

RewriteCond %{HTTP_ACCEPT} text/vnd.wap.wml [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} !(ipad|joojoo|tablet) [NC] 
RewriteCond %{HTTP_USER_AGENT} \bagent1|agent2|agent3\b[NC] 
RewriteCond %{HTTP_HOST} ^domain1\.com$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.domain1\.com$ 
RewriteRule .* "http\:\/\/m\.domain1.com/" [R,L] 

但是,當我試圖捕捉域名,並在規則中使用它,它似乎並沒有工作,例如:

RewriteCond %{HTTP_ACCEPT} text/vnd.wap.wml [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} !(ipad|joojoo|tablet) [NC] 
RewriteCond %{HTTP_USER_AGENT} \bagent1|agent2|agent3\b[NC] 
RewriteCond %{HTTP_HOST} ^(domain1\.com)$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.(domain1\.com)$ [OR] 
RewriteCond %{HTTP_HOST} ^(domain2\.com)$ [OR] 
RewriteCond %{HTTP_HOST} ^www\.(domain2\.com)$ 
RewriteRule .* "http\:\/\/m\.$1/" [R,L] 

$ 1沒有得到設定域名。任何想法我做錯了什麼?

TIA

回答

1

有兩個錯誤

RewriteRule .* "http\:\/\/m\.$1/" [R,L] 

一,你並不需要,因爲它不是爲處理逃避替換URL路徑中的字符(如/這裏)模式,但只是文本。允許使用$%反向引用,但不需要轉義。

二,捕捉到你需要%1而不是$1因爲子組來自RewriteCond而不是RewriteRule主機子組。所以,你可以改變你的.htaccess

RewriteCond %{HTTP_ACCEPT} text/vnd.wap.wml [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} !(ipad|joojoo|tablet) [NC] 
RewriteCond %{HTTP_USER_AGENT} \b(agent1|agent2|agent3)\b[NC] 

RewriteCond %{HTTP_HOST} ^(?:www\.)?((?:domain1|domain2)\.com)$ [NC] 
RewriteRule^http://m.%1/ [R=301,L] 

用於與www\.啓動,但使得可選(?: ...)?任何域名的%{HTTP_HOST}條件匹配。接着是domain1|domain2,然後是.com

+0

感謝一羣拉維,這就是我正在尋找的! – Analog

+0

這是拉維的工作,但有一個問題。如果我有.net和.info域名會怎麼樣?我應該做RewriteCond%{HTTP_HOST} ^(?: www \。)?(?: domain1 \ .com | domain2 \ .net)$ [NC]? – Analog

+0

加入另一個管道'|'以容納多個域名後綴爲'^(?: www \。)?((?: domain1 | domain2)\。(?: com | net | org))$' –