Подтвердить что ты не робот

Mod_rewrite - добавить www

Я пытаюсь заставить www для моего адреса сайта с помощью .htaccess:

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

Если я открываю mysite.com, это работает нормально - он добавляет www. Он становится http://www.mysite.com/index.php.

Но если я открою mysite.com/subpage, я снова перенаправлен на http://www.mysite.com/index.php вместо http://www.mysite.com/subpage.

Но если я открываю http://www.mysite.com/subpage, я не получаю перенаправление (это ожидаемое поведение).

Как я могу это исправить? Я хотел бы перенаправить все запросы на мой сайт в субдомен www.

4b9b3361

Ответ 1

Проблема здесь:

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]

^ указывает начало строки, а $ указывает конец.

Чтобы сделать это, вам нужно выбрать подстановочный знак после .com или .+.

повторить, что сказал Алекс:

 <IfModule mod_rewrite.c>
   RewriteCond %{HTTPS} !=on
   RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
   RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
 </IfModule>

Ответ 2

Из превосходного HTML5 Boilerplate .htaccess:

<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
  RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

Ответ 3

Собственно, я должен не согласиться с г-ном Санто.

Казалось бы, проблема не в том:

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]

Через некоторые дополнительные исследования (через Google) я обнаружил, что это отлично подойдет для меня:

<IfModule mod_rewrite.c>
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
  RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

г. Ответ Szanto, в то время как хорошо отформатированный, кажется, перенаправляет все запросы, не пропускающие "www" для перенаправления с прикрепленным "www" . Это не было желательным результатом с большинством поддоменов. Вышеприведенный код перенаправляется только в том случае, если перед доменным именем TL отсутствует "www" и не поддомен.

Надеюсь, что это поможет другим.