mod_rewrite - добавить www - PullRequest
       1

mod_rewrite - добавить www

10 голосов
/ 21 сентября 2011

Я пытаюсь ввести 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.

Ответы [ 3 ]

17 голосов
/ 21 сентября 2011

Из превосходного 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>
14 голосов
/ 21 сентября 2011

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

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>
6 голосов
/ 22 сентября 2012

На самом деле, я должен не согласиться с мистером Сзанто.

Может показаться, что проблема была не в:

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>

Мистер.Ответ Сзанто, несмотря на то, что он хорошо отформатирован, похоже, перенаправляет все запросы, в которых отсутствует «www», для перенаправления с приложенным «www».Это было нежелательным результатом для большинства поддоменов.Приведенный выше код перенаправляет только в том случае, если перед доменным именем TL нет «www» И субдомена.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...