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

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

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

Подскажите пожалуйста, на время переезда с 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
146
#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)
SeVlad
На сайте с 03.11.2008
Offline
1609
#2
blaza:
соответственно нужно реализовать 2 параллельных 301 редиректа, чтобы на обоих протоколах работал

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

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Связь со мной через http://wp.me/P3YHjQ-3.
M
На сайте с 04.12.2013
Offline
223
#3

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

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

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

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

Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
Joker-jar
На сайте с 26.08.2010
Offline
154
#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. Третий содержит уже настройки для сайта.

B
На сайте с 14.11.2006
Offline
86
#5

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

M
На сайте с 04.12.2013
Offline
223
#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
250
#7

:)

богоносец
На сайте с 30.01.2007
Offline
753
#8
miketomlin:
Исключение для роботс, как выше написали, думаю, не помешает, если сможете организовать отдачу отдельной версии файла для каждого протокола (с разным значением директивы Host).

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

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

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

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

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

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

Две не нужно:

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

.

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

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

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

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

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

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

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

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

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

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

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

12

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