Чтобы правильно настроить редирект с http на https много ума не надо. Казалось бы, указал нужное правило — и все работает. Но не тут то было. Хостингов множество и у каждого работают свои особо умные сисадмины, которые часто вообще не понимают что просты вебмастерам для счастья от них надо. Поэтому сервера настраивает каждый сисадмин по своему.
Сайты на Apache или Nginx+Apache
На мой взгляд, самый простой способ настроить редирект с http на https — внести в .htaccess следующие правила:
- Для нормальных хостингов, где все настроено и работает нормально (например, beget.com):
1 2 3 4 5 |
RewriteEngine On RewriteBase / RewriteCond %{HTTPS} !=on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] |
Тоесть тут все просто, переадресовываем всех кто пришел не по https на аналогчиную страницу, но уже с https.
2. Для неадекватных хостингов, где все немного иначе, такое часто на связке nginx с apache (например, чудо-лоукост www.online.net)
У них бывает не настроена в конфиге nginx передача информации в апач о протоколе. А .htaccess обрабатывает апач и предыдущий вариант не работает, поэтому тут нужен такой код редиректа в .htaccess:
1 2 3 4 5 6 |
RewriteEngine On RewriteBase / RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] |
Обычному смертному, конечно удобнее править .htaccess, но он может не обрабатываться, про это дальше.
А что, если NGINX без Apache?
Бывает, что хостинг работает на nginx без apache. И тут вообще вебмастера впадают в ступор, так как .htaccess у них вообще не обрабатывается и редирект не срабатывает.
Для них надо править конфиг nginx, в секции server дописать редирект, по подобию:
1 2 3 4 5 |
server { listen 80; server_name domain.com; rewrite ^/(.*)$ https://domain.com/$1 permanent; } |
Если одна и та же секция отвечает и за http и https, то примерно так:
1 2 3 4 5 6 7 8 |
server { listen 80; listen 443 ssl; server_name domain.com; if ($scheme = http) { return 301 https://$server_name$request_uri; } |
Когда нет доступа к исправлению .htaccess или конфигов NGINX
Бывает и такое. Вот пример из интернета для редиректа с http на https для WordPress. Этот код надо вставить в файл functions.php (редактирование темы):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
## redirect с http на https add_action( 'init', 'http_to_https_redirect' ); function http_to_https_redirect() { if ( is_ssl() ) { return; } if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'http' ) ) { wp_redirect( set_url_scheme( $_SERVER['REQUEST_URI'], 'https' ), 301 ); } else { wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 ); } exit; } |
Может вариант не сработать, если сервер на NGINX. От настроек хостера зависит.
Но смысл в том, что при проявлении фантазии, можно и на php сделать редирект.
Если ни один из способов настройки редиректов с http на https вам не подошел, но вы нашли другое решение, то прошу поделиться им в комментариях ниже. Это поможет всем.
За последний пункт — спасибо. Действительно помогло, хотя и инкостыляция)
Для редиректа в Apache + Nginx достаточно в конфигурационный файл сайта добавить код для редиректа на https
server {
listen 80;
server_name site.ru http://www.site.ru;
rewrite ^ https://www.site.ru$request_uri? permanent;
}