Как сделать параллельный редирект http с www на без www и https с www на без www

12
B
На сайте с 14.11.2006
Offline
86
1980

Всем привет. С наступившим Новым Годом и наступащим рождеством.

Подскажите пожалуйста, на время переезда с http на https по рекомендациям Яши возникла потребность сделать (на Opencart) два зеркала и соответственно нужно реализовать 2 параллельных 301 редиректа, чтобы на обоих протоколах работал

для http все страницы с www на без www

для https все страницы с www на без www

и чтобы они нормально существовали каждый в рамках своего протокола.

- Интернет-Магазин штатных автомагнитол на Android (http://www.android-car.ru) - On-line журнал об автомобильной электронике, навигации и мультимедиа системах (http://www.navi-blog.ru)
C
На сайте с 26.12.2005
Offline
123
#1

Два редиректа

1 www на https без www

2 http на https

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.(.*)$

RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

RewriteCond %{HTTPS} !=on

RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]

Лучший хостинг, которым пользовался за последние 15 лет! (https://beget.com/p107248)
SV
На сайте с 03.11.2008
Online
1348
#2
blaza:
соответственно нужно реализовать 2 параллельных 301 редиректа, чтобы на обоих протоколах работал

Не два, а один. С www на без www

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Топики помощи с ⓌordPress (https://searchengines.guru/ru/forum/1032910 ) и основы безопасности сайтов ( https://searchengines.guru/ru/forum/774117 ). *** Помощь\консультации в топиках форума - БЕСПЛАТНО. Платные услуги ( https://wp.me/P3YHjQ-3 ) - с бюджетом от 150$ ***
M
На сайте с 04.12.2013
Offline
179
#3

Charli, зачем делать два, когда можно один? См. флаг OR к условию. Над именем хоста в подстановке для универсальности можно поколдовать, либо прописать его явно.

---------- Добавлено 07.01.2018 в 15:09 ----------

Явно собирали по частям вашу солянку: ^(.*)$ vs ^/?(.*)

Выберите что-то одно, чтобы не привносить лишнюю энтропию :)

Хостинг FOZZY (http://fozzy.com.ru) / Выслушаю предложения на домены (http://u75.ru/domains-for-sale) / Домены и скрипт для коротких ссылок (http://u75.ru/domains-for-shortcuts)
Joker-jar
На сайте с 26.08.2010
Offline
123
#4

Для более корректной склейки желательно не перенаправлять запросы к robots.txt. Я предпочитаю использовать следующую конструкцию (Nginx):

server {
listen xx.xx.xx.xx;
server_name xx.xx.xx.xx domain.com www.domain.com;

root /var/www/domain.com/html;

location / {
if ( $uri !~ ^/robots\.txt ) {
rewrite ^ https://domain.com$request_uri? permanent;
}
}
}

server {
ssl_certificate ...;
ssl_certificate_key ...;

listen xx.xx.xx.xx:443 ssl http2;
server_name xx.xx.xx.xx www.domain.com;

root /var/www/domain.com/html;

location / {
if ( $uri !~ ^/robots\.txt ) {
rewrite ^ https://domain.com$request_uri? permanent;
}
}
}

server {
ssl_certificate ...;
ssl_certificate_key ...;

listen xx.xx.xx.xx:443 ssl http2;
server_name domain.com;

root /var/www/domain.com/html;
....
далее основные настройки

Первый блок перенаправляет запросы по HTTP с обращением по IP, по домену, по домену с www. Второй - по IP и по домену с www через HTTPS. Третий содержит уже настройки для сайта.

Оказываю услуги веб-программиста и администратора Linux. ICQ: 751355 | Jabber: jokerjar@jabber.ru | Skype: joker-jar
B
На сайте с 14.11.2006
Offline
86
#5

Чего-то запутали совсем ))) что в итоге самое правильное ?

M
На сайте с 04.12.2013
Offline
179
#6

Делайте в точности, как сказали: две непересекающиеся версии редиректа с www на без www с сохранением тек. протокола. Исключение для роботс, как выше написали, думаю, не помешает, если сможете организовать отдачу отдельной версии файла для каждого протокола (с разным значением директивы Host).

---------- Добавлено 08.01.2018 в 03:21 ----------

Чтобы не париться с универсальностью, делается в лоб:


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

И рядом то же самое для HTTP.

---------- Добавлено 08.01.2018 в 03:25 ----------

К сожалению mod_rewrite не понимает абс. адрес без указания схемы (//...).

WebAlt
На сайте с 02.12.2007
Offline
210
#7

:)

Промокод на скидку 25%: [ 64821976 ] на сайтах: [ https://firstvds.ru ] - виртуальные серверы; [ https://1dedic.ru ] - выделенные серверы; [ https://ispserver.ru ] - хостинг, VPS/VDS, выделенные и облачные серверы.
богоносец
На сайте с 30.01.2007
Offline
687
#8
miketomlin:
Исключение для роботс, как выше написали, думаю, не помешает, если сможете организовать отдачу отдельной версии файла для каждого протокола (с разным значением директивы Host).

Почему с разным Host?

И где ваше исключение для robots.txt?

blaza:
что в итоге самое правильное ?

В стартовом посте задача сформулирована частично. Как будто вы не прочитали всех рекомендаций бота щукина о тормозном яндексе...

В итоге важны ответы сервера ... на ограниченное количество обращений, которыми бот всё же страдает.

SV
На сайте с 03.11.2008
Online
1348
#9
miketomlin:
две непересекающиеся версии редиректа с www на без www

Две не нужно:

blaza:
чтобы на обоих протоколах работал

.

miketomlin:
с разным значением директивы Hos

Вот этого как раз делать не нужно. Один роботс с одним Host

blaza:
что в итоге самое правильное ?

Правильно - один редирект, убирающий www (а кстати, разве оперкарте это не движок делает?).

Но нужно определиться какой протокол основной и см картинку WebAlt-а.

M
На сайте с 04.12.2013
Offline
179
#10

Да, с двумя роботс я, видимо, погорячился. Немного неправильно понял написанное ТСом, наплевав при этом на здравый смысл и оф. рекомендации яши.

богоносец:
И где ваше исключение для robots.txt?

ТС не просил, я и не написал.

SeVlad:
Две не нужно

Ну по одному для каждого протокола, чтобы не городить универсальный, работающий в пределах тек. протокола.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий