truethen
Привет всем.
Задал один вопрос
тут и вариантов никто не смог предложить.
Надеюсь тут еще есть специалисты и кто-нибудь подскажет:
Есть домен.ком с сертификатом.
Нужно сделать редиректы:
1) с www_домен_ком на
https://домен.ком
2) с
https://www_домен_ком на
https://домен_ком
3) с домен.ком на
https://домен.ком
Делаю первые два и все ОК
А третий вариант гугл подсказывает только методом включения https, НО
тогда появляется двойной редирект для 2-го варианта: с www идет на
https://www и потом второй редирект на
https://домен.ком
Есть работающий вариант для всех 3 правил перенаправлений без двойного редиректа?
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 - пробел тут убрать надо естественно, просто форум вырезает тогда.
Не соображу где тут могут быть два редиректа?
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]
Но и это не по перфекционистки
хоть в конфиге апача и стоит дефолтный 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]
то все заработает идеально, но пока что никак не выходит каменный цветок
Mad
Какая разница какой там charset у редиректа?, если отдаётся просто заголовок Location: с урлом, и тела ответа нет.
Ну а дальше мне тяжело понять Ваш поток мыслей.
Что работает, а что нет?
rickdeckard
truethen писал:
Привет всем.
Задал один вопрос
тут и вариантов никто не смог предложить.
Надеюсь тут еще есть специалисты и кто-нибудь подскажет:
Есть домен.ком с сертификатом.
Нужно сделать редиректы:
1) с www_домен_ком на
https://домен.ком
2) с
https://www_домен_ком на
https://домен_ком
3) с домен.ком на
https://домен.ком
Делаю первые два и все ОК
А третий вариант гугл подсказывает только методом включения https, НО
тогда появляется двойной редирект для 2-го варианта: с www идет на
https://www и потом второй редирект на
https://домен.ком
Есть работающий вариант для всех 3 правил перенаправлений без двойного редиректа?
есть lua поддержка в apache nginx или js
написать логику на нем где будет проверятся все три или больше условий сразу
и делать только 1 редирект что мешает?
в крайнем случае всегда можно сделать редирект на уровне веб приложения (php и т.п) - как обчно и делают.
truethen
Оффтопик: Сорри, не включил напоминалку о получении ответов
завел в вхост апача так и все отлично работает:
Код:
А так как изначально ступил и не завел сертификат для www, то пришлось еще дописать:
Код:
RewriteCond %{HTTP_HOST} ^https://www.domen.com$ [NC]
RewriteRule ^(.*)$
https://domen.com$1 [R=301,L]
Mad писал:
Не соображу где тут могут быть два редиректа?
вот так делают не подумав и вот Вам куча редиректов)))
сплошное
наебалово