2013-08-19 10 views
0

Так что я получил следующий код переписывания в моем HTAccessHtaccess не WWW для WWW и удалить субдомен WWW

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

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

Работает идеально подходит для перенаправления не-WWW на WWW для моих доменов.

У меня есть поддомен, давайте назовите его «sub.domain.com», который работает. Если я перейду www.sub.domain.com, он перенаправляется на 'sub.domain.com/sub/' У кого-нибудь есть идея, почему?

+0

Что не так? Как в ожидаемом поведении? –

+0

Я предполагаю, что есть еще одна перезапись, которая внутренне переписывает ваш поддомен в нужный каталог. Переадресация делает это видимым. Сопоставьте свое правило с '^% 1 /(.*)$', и оно должно работать так, как вы ожидаете. – Sumurai8

+0

@ Sumurai8 это не перенаправление, www.sub.domain.com -> sub.domain.com –

ответ

0

Ни одно из правил, которые у вас есть в запросах, не задает маршруты в папку поддомена. /sub/ никогда не должен быть там, если он не был первоначально в запросе.

При этом все ваши правила переадресации должны прийти до любых правил маршрутизации. Правила маршрутизации быть вещи, которые внутренне направляет запросы на другой URI, например:

RewriteCond %{HTTP_HOST} ([^\.]*)\.domain\.com$ [NC] 
RewriteRule (.*) /%1/$1 [L] 

Это исключает internall маршрутов в папку с именем то же самое, что и подобласти. Если это правило должно быть до перенаправление, применяются оба правила, а перенаправленный URI становится /sub/. Вам необходимо, чтобы ваши правила маршрутизации размещались после ваших правил переадресации, например. все правила, которые имеют http:// или флаг R.

Смежные вопросы