2012-12-11 17 views
0

我以前得到了一些很好的幫助,有點複雜的.htaccess文件。多地點部隊www。在所有子域htaccess片段

它是一個多站點/域文件,並使用%{HTTP_HOST}將非wwww重寫/ 301重寫到www.widgets.com地址。

RewriteCond %{HTTP_HOST} !^www\. [NC] 
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

問題是,RegexFu只查找NOT WWW。然後添加www。

這可能會導致一些重複的內容問題,如果有人鏈接說,mail.widgets.com,因爲這是重定向到www.mail.widgets.com。

總結:

我需要:

mail.widgets.com -> www.widgets.com 
dogs.widgets.com -> www.widgets.com 
www.mail.widgets.com -> www.widgets.com 
www.dogs.widgets.com -> www.widgets.com 

我已經嘗試了各種排列liek這個沒有運氣:

RewriteCond %{HTTP_HOST} !^www\.[^\.]+\.com [NC] 
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L] 

沒有骰子。我最終會出現一個循環或其他問題。

我需要簡單的東西,是不是:

www. (anything but period)  .com - > www. (last string before .com)   .com 

和粗糙的標準:

(anything but period).com -> www. (anything but period).com 

如果有人能借我的手,我將不勝感激。

回答

2

嘗試:

RewriteCond %{HTTP_HOST} !^www\. [NC,OR] 
RewriteCond %{HTTP_HOST} ^www\.[^.]+\.[^.]+\.[^.]+ [NC] 
RewriteCond %{HTTP_HOST} ([^.]+)\.com$ [NC] 
RewriteRule ^(.*)$ http://www.%1.com/$1 [R=301,L] 

%1反向引用,在前面的重寫條件匹配([^.]+)分組。它會忽略域名之前的任何子域,如果有的話。

+0

更接近。我認爲這是工作:) www.person.widgets.com不會重寫到www.widgets.com :(我想這是因爲!^ www \。條件。person.widgets.com但是現在重寫爲www.widgets.com .... –

+0

@SamanthaP添加了一個額外的OR'ed條件,以防萬一它以www開頭,但擁有多個第三級域名 –

+0

奇怪的。它看起來像是這個第一行作品:RewriteCond%{HTTP_HOST}!^ www \。([^。] +)\。com $ [NC] –

相關問題