.htaccess - как заставить "www." в общем? - PullRequest
97 голосов
/ 07 февраля 2011

Это изменит domain.com на www.domain.com:

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

Как заменить часть «домен», чтобы она работала на любом домене?

Ответы [ 8 ]

237 голосов
/ 10 февраля 2011

Я бы использовал это правило:

RewriteEngine On
RewriteCond %{HTTP_HOST} !=""
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Первое условие проверяет, является ли значение Host не пустым (в случае HTTP / 1.0);вторая проверяет, не начинается ли значение Host с www.;третья проверка HTTPS (%{HTTPS} это либо on или off, поэтому %{HTTPS}s это либо ons или offs, а в случае ons s совпадает)Подстановочная часть RewriteRule затем просто объединяет информационные части в полный URL.

42 голосов
/ 07 февраля 2011

Это будет сделано:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
5 голосов
/ 17 декабря 2014

Если вы хотите перенаправить все запросы не-www на ваш сайт в версию www, все, что вам нужно сделать, это добавить следующий код в ваш файл .htaccess:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
3 голосов
/ 24 ноября 2013

Это не будет работать с поддоменами.

domain.com правильно перенаправляется на www.domain.com

, но

images.domain.com перенаправляется наwww.images.domain.com

Вместо того, чтобы проверять, не является ли поддомен «не www», проверьте наличие двух точек:

RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ HTTP%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
1 голос
/ 01 июля 2016
RewriteEngine On

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]

Это перенаправляет example.com на www.example.com, исключая субдомены.

1 голос
/ 07 февраля 2011

Следующие должны ставить префикс «www» для любого запроса, который не имеет, и перенаправить отредактированный запрос на новый URI.

RewriteCond "%{HTTP_HOST}" "!^www\."         [NC]
RewriteCond "%{HTTP_HOST}" "(.*)"
RewriteRule "(.*)"         "http://www.%1$1" [R=301,L]
0 голосов
/ 13 июля 2018

Это старый вопрос, и есть много разных способов сделать это. Наиболее полный ответ, ИМХО, находится здесь: https://gist.github.com/vielhuber/f2c6bdd1ed9024023fe4. (Вставка и форматирование кода здесь не работает для меня)

0 голосов
/ 07 ноября 2017

для меня это работало как волшебство

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

...