2010-04-12 2 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. Я все равно принимаю ваш ответ;) danke. – MilMike

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

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(); 
} 

Это также будет перенаправлено на первоначально запрошенную страницу.