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
.
Ответы
Ответ 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" и не поддомен.
Надеюсь, что это поможет другим.