Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Убрать двойной редирект
цитата
09/08/17 в 23:46
 truethen
Привет всем.
Задал один вопрос тут и вариантов никто не смог предложить.

Надеюсь тут еще есть специалисты и кто-нибудь подскажет:

Есть домен.ком с сертификатом.
Нужно сделать редиректы:
1) с www_домен_ком на https://домен.ком
2) с https://www_домен_ком на https://домен_ком
3) с домен.ком на https://домен.ком

Делаю первые два и все ОК
А третий вариант гугл подсказывает только методом включения https, НО
тогда появляется двойной редирект для 2-го варианта: с www идет на https://www и потом второй редирект на https://домен.ком

Есть работающий вариант для всех 3 правил перенаправлений без двойного редиректа?
цитата
10/08/17 в 02:12
 Mad
Навскидку,

Делаем два виртуалхоста

Первый без SSL

Код:
<VirtualHost 172.20.30.40:80>
ServerName domain.com
ServerAlias www .domain.com
RewriteRule ^(.*)$ https://domain.com/$1 [R=301,L]
</VirtualHost>


Втрой с SSL

Код:
<VirtualHost 172.20.30.40:443>
ServerName domain.com
ServerAlias www .domain.com
SSLEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

DocumentRoot "/www/domain/https/..."
и тд
</VirtualHost>



ServerAlias www .domain.com - пробел тут убрать надо естественно, просто форум вырезает тогда.

Не соображу где тут могут быть два редиректа?
цитата
10/08/17 в 14:47
 truethen
Вставил Ваше предложение в VirtualHost (с изменениями)
Действительно не стало двойного редиректа. Спасибо.
Возникли только другие неприятные мелочи:

<VirtualHost 172.20.30.40:80>
RewriteRule ^(.*)$ https://domain.com/$1 [R=301,L]

такая конструкция не работает для редиректа
3) с домен.ком на https://домен.ком

или появляется неприятный момент: Location: https://domain.com//
с двумя слэшами на конце(
пришлось делать:
RewriteCond %{SERVER_NAME} =domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,NE,R=permanent]

Но и это не по перфекционисткиicon_smile.gif
хоть в конфиге апача и стоит дефолтный UTF-8, но видимо обрабатывается все ранее и отдается по первому языку-en:
Content-Type: text/html; charset=iso-8859-1

Хотя все идеально для 443 - и домен и 1 редирект и charset=UTF-8:
<VirtualHost 172.20.30.40:443>
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

HTTP/1.1 301 Moved Permanently
Server: Apache
Location: https://domain.com/
Content-Type: text/html; charset=UTF-8

Получается если сделать рабочей конструкцию для 80 от 443:
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
то все заработает идеально, но пока что никак не выходит каменный цветок
цитата
11/08/17 в 03:35
 Mad
Какая разница какой там charset у редиректа?, если отдаётся просто заголовок Location: с урлом, и тела ответа нет.

Ну а дальше мне тяжело понять Ваш поток мыслей.
Что работает, а что нет?
цитата
11/08/17 в 08:18
 rickdeckard
truethen писал:
Привет всем.
Задал один вопрос тут и вариантов никто не смог предложить.

Надеюсь тут еще есть специалисты и кто-нибудь подскажет:

Есть домен.ком с сертификатом.
Нужно сделать редиректы:
1) с www_домен_ком на https://домен.ком
2) с https://www_домен_ком на https://домен_ком
3) с домен.ком на https://домен.ком

Делаю первые два и все ОК
А третий вариант гугл подсказывает только методом включения https, НО
тогда появляется двойной редирект для 2-го варианта: с www идет на https://www и потом второй редирект на https://домен.ком

Есть работающий вариант для всех 3 правил перенаправлений без двойного редиректа?


есть lua поддержка в apache nginx или js
написать логику на нем где будет проверятся все три или больше условий сразу
и делать только 1 редирект что мешает?
в крайнем случае всегда можно сделать редирект на уровне веб приложения (php и т.п) - как обчно и делают.
цитата
11/08/17 в 17:48
 localhost
редирект нужен для апача или нгинкс?
цитата
23/09/17 в 12:47
 truethen
Оффтопик: Сорри, не включил напоминалку о получении ответов
завел в вхост апача так и все отлично работает:

Код:
RewriteCond %{SERVER_NAME} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://domen.com$1 [L,NE,R=permanent]
RewriteCond %{SERVER_NAME} =domen.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,NE,R=permanent]
RewriteCond %{SERVER_NAME} ^XX\.XX\.XX\.XX$
RewriteRule ^(.*)$ https://domen.com$1 [L,NE,R=permanent]


А так как изначально ступил и не завел сертификат для www, то пришлось еще дописать:
Код:
RewriteCond %{HTTP_HOST} ^https://www.domen.com$ [NC]
RewriteRule ^(.*)$ https://domen.com$1 [R=301,L]


Mad писал:
Не соображу где тут могут быть два редиректа?

вот так делают не подумав и вот Вам куча редиректов)))
сплошное наебалово


Эта страница в полной версии