.htaccess-как заставить "www.- в общем смысле?


это изменит domain.com to www.domain.com:

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

как мне заменить часть "домен", чтобы это работало на любой домен?

8 94

8 ответов:

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

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]

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

EDIT: не работает с URL, как:https://yourdomain.com/en/usa

Это будет сделать это:

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

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

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

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

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]

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

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

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

Это перенаправляет example.com to www.example.com кроме поддоменов.

Это сработало как по волшебству для меня

перезапись % {HTTP_HOST} ^sitename.com [NC] RewriteRule ^(.* ) $ https://www.sitename.com/$1 [L, R=301, NC]

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