2010-04-12 69 views
7

我有一個htaccess的重定向 「非www」 的是這樣的:非WWW的.htaccess重定向 - 忽略其他子域

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

這是工作。但是,我也有一些除www以外的子域名。 如果我打電話例如http://shop.example.com它重定向我: http://www.shop.example.com

我不想寫的子域到.htaccess文件,它會自動工作,只是忽略了別的比www和「」是這樣的:

if subdomain =='' -> redirect to www.HTTP_HOST.... 
elseif subdomain !='' && subdomain !='www' -> do nothing. 

謝謝!

回答

1

試試這個:

Options +FollowSymlinks 

RewriteEngine On 

RewriteCond %{HTTP_HOST}//s%{HTTPS} ^www\.(.*)//((s)on|s.*)$ [NC] 

RewriteRule^http%3://%1%{REQUEST_URI} [L,R=301] 

internetagentur.drupal-webmaster.de(子域)剛剛試了一下 - 主要是加www。

+0

喲Pero!我沒有測試它,因爲我通過php找到了另一個解決方案。無論如何,我接受你的答案;)丹克。 – MilMike 2010-05-25 17:43:00

10

試試這個規則:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ 
RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 

而且也採取HTTPS考慮:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
+0

謝謝 - 供參考此解決方案適用於我 服務器沒有SSL,因此部分未經測試 – Alvin 2011-08-11 21:51:54

0

如果你想有一個PHP的解決方案,您可以使用類似這樣:

define('URL', 'yourdomain.com/'); 

// fix : impose www rule 
if (strpos($_SERVER['SERVER_NAME'], 'www') === false) { 
    header('Location: http://www.'.URL.$_SERVER['REQUEST_URI']); 
    die(); 
} 

這也會重定向到最初請求的頁面。

相關問題