opened image

Как сделать 301 редирект с HTTP на HTTPS

 

 

После подключения SSL-сертификата для сайта важно обеспечить, чтобы все обращения к сайту по незащищённому протоколу HTTP перенаправлялись на HTTPS. Это не только повышает безопасность, но и положительно влияет на SEO и доверие пользователей. Настроить 301 редирект можно через файл .htaccess (если используется Apache), либо средствами веб-сервера nginx. Ниже описаны различные способы реализации этой задачи.

 

 

301 редирект с HTTP на HTTPS с помощью .htaccess

 

Полный редирект всех страниц

 

Вариант 1

 

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

 

 

 

 

Вариант 2

 

RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

 

 

 

 

Вариант 3 (с учётом проксирования)

 

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

 

 

 

 

Редирект только конкретной страницы

 

RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} =/payments.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

 

 

 

 

 

Альтернативный вариант:

 

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} =/payments.php
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

 

 

Редирект всех страниц, кроме одной

 

RewriteEngine On
RewriteCond %{HTTPS} =off
RewriteCond %{REQUEST_URI} !^/test-page.php
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L]

 

 

301 редирект с HTTP на HTTPS средствами nginx

 

 

Редирект всего сайта

 

Если для одного домена в конфигурации nginx определены два server-блока (один для HTTP, второй для HTTPS), правило добавляется в HTTP-блок:

 

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

 

 

 

Если используется один server-блок, применяют условие:

 

if ($ssl_protocol = "") {
    rewrite ^ https://$server_name$request_uri? permanent;
}

 

 

Редирект только конкретной страницы

 

location = /payments.php {
    rewrite ^(.*)$ https://$http_host$request_uri redirect;
}

 

 

Редирект всех страниц, кроме одной

 

location = /test-page.php {
    # Без редиректа — оставляем как есть
}

location / {
    rewrite ^(.*)$ https://$http_host$request_uri redirect;
}

 

 

Дополнительные рекомендации

 

  • Убедитесь, что файл .htaccess активен и Apache поддерживает модуль mod_rewrite.

  • Изменения в .htaccess вступают в силу сразу. Ошибки в синтаксисе могут вызвать ошибку 500. Всегда сохраняйте резервную копию оригинального файла.

  • После изменения конфигурации nginx обязательно выполните проверку:

 

nginx -t

 

 

 

  • Затем перезагрузите конфигурацию:

 

service nginx reload

 

  • Или перезапустите сервер:

 

service nginx restart

 

 

Советы по безопасности и SEO

 

  • 301 редирект является постоянным перенаправлением, передающим "вес" страницы (PageRank). Используйте его, если полностью переходите на HTTPS.

  • Проверьте наличие смешанного контента (mixed content), чтобы избежать ошибок в браузерах.

  • Используйте HSTS (HTTP Strict Transport Security) для дополнительной защиты пользователей:

 

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

 

 

Заключение

 

Настройка редиректа с HTTP на HTTPS — важный шаг в обеспечении безопасности и корректного отображения сайта в браузерах. Выбор метода зависит от используемого веб-сервера. Apache-ориентированные сайты могут использовать .htaccess, а nginx требует редактирования конфигурационных файлов. Правильно реализованный редирект не только защищает данные пользователей, но и улучшает позиции сайта в поисковых системах.