@Alexanderkrupnitsky
начинающий разработчик

Как сделать 301 редирект для всего сайта с http и www на https без www?

Друзья, нужна помощь. Как сделать 301 редирект для всего сайта и его папок в .htaccess:

Пример редиректа ниже:
http://www.site.ru --> https://site.ru

Заранее благодарен всем, кто поможет с этой проблемой!:)
  • Вопрос задан
  • 5541 просмотр
Пригласить эксперта
Ответы на вопрос 4
castomi
@castomi
Серверный администратор - tickets.settin.ru
if ($http_host != "site.ru") { rewrite ^ $scheme://site.ru$request_uri? permanent; }
if ($scheme != "https") { rewrite ^ https://$http_host$request_uri? permanent;}

Ещё можно для http сделать отдельный виртуальный хост и редиректить с него по этому правилу
rewrite ^ https://$http_host$request_uri? permanent;

И аналогично сделать виртуальный хост для www отдельный и редиректить там так
rewrite ^ $scheme://site.ru$request_uri? permanent;

Поясню разницу подходов, если будут отдельные виртуальные хосты будет оптимальнее. Ведь if проверяется при каждом открытии тратя ресурсы, а если редиректы распиханы по виртуальным хостам ресурсы не тратятся)
Ответ написан
Комментировать
Добавьте в файле .htaccess код:
RewriteEngine On

RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
Ответ написан
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Универсально и под любой проект. Отредактируйте, т.к. тут идет редирект на https://www., если сервак не тестовый и не локальный.

# -- FORCE HTTPS
<IfModule mod_rewrite.c>
  RewriteEngine On

  RewriteCond %{HTTP_HOST} ^test. [NC]
  RewriteCond %{HTTP_HOST} \.loc$ [NC]
  RewriteCond %{HTTPS} =on [OR]
  RewriteCond %{HTTP:X-Forwarded-Proto} https
  RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]

  RewriteCond %{HTTP_HOST} ^test. [NC]
  RewriteCond %{HTTP_HOST} \.loc$ [NC]
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteRule .* http://%1/%{REQUEST_URI} [R=301,L,QSA]

  RewriteCond %{HTTP_HOST} !^test. [NC]
  RewriteCond %{HTTP_HOST} !\.loc$ [NC]
  RewriteCond %{HTTP_HOST} !^www\. [NC]
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP:X-Forwarded-Proto} !https
  RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]

  RewriteCond %{HTTP_HOST} !^test. [NC]
  RewriteCond %{HTTP_HOST} !\.loc$ [NC]
  RewriteCond %{HTTPS} !=on
  RewriteCond %{HTTP:X-Forwarded-Proto} !https
  RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,QSA]
</IfModule>
Ответ написан
############################################################################
#### Выбор основного зеркала (с www или без www)                        ####
############################################################################
    # 1. Удалить www
RewriteCond %{ENV:HTTPS} on
    #Если включен https
RewriteRule .* - [E=SSL:s]
    #То создаем переменную  ssl с текстом s
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    # Проверяем, содержит ли домен www в начале URL.
RewriteRule ^(.*)$ http%{ENV:SSL}://%1/$1 [R=301,L]
    # Перенаправляем удаляем www

    # 2. Добавить www
#RewriteCond %{ENV:HTTPS} on
    #Если включен https
#RewriteRule .* - [E=SSL:s]
    #То создаем переменную  ssl с текстом s
#RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
    # Если нет www в начале домена
#RewriteRule ^(.*)$ http%{ENV:SSL}://www.%{HTTP_HOST}/$1 [R=301,L]
    #Подставляем www и https если он включен.

############################################################################
#### Перенаправляем протокол https на http                              ####
############################################################################
#RewriteCond %{ENV:HTTPS} on
   # Проверяем наличие https в URL.
#RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
   # Перенаправляем протокол на http.

############################################################################
#### Перенаправляем протокол http на https                              ####
############################################################################
#RewriteCond %{ENV:HTTPS} !on
   # Проверяем наличие https в URL.
#RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
   # Перенаправляем протокол на http.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы