Проблема с редиректом на HTTPS
-
Всем привет!
На сервере настроили SSL, при наборе адреса https://www.site.ru — все работает корректно
Решил добавить редирект с http на https через .haccess
По адресу https://toster.ru/q/174797 нашел несколько вариантов, перепробовал все — ни один не работает.
Во всех случаях редирект происходит, но сайт открывается жалобой на слишком большое кол-во редиректов — http://prntscr.com/evwhvhНачал крутить все способы более подробно.
Один способ после некоторых манипуляций заработал, но отказали ЧПУ ссылки.
Содержимое htaccessRewriteCond %{ENV:HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPressРедирект на https начинает нормально работать если убрать
RewriteEngine On
Но при этом отказывают ссылки.
Я в директивах htaccess понимаю слабо, скорее всего ошибка плевая, ламерская, но понять в чем она не могу…Заранее благодарен за помощь!
-
@flector, я же пишу,
редирект работает, если снести WP.
Если бы апач не понимал что он уже на HTTPS, редирект и без WP не работал бы.
Дело не в серверных настройках, а в связке «WP — директивы htaccess»
Дело не в серверных настройках, а в связке «WP — директивы htaccess»
если бы дело было только в wordpress и .htaccess, то для вас сработал бы любой из вариантов, который вам выше предложили. у нас ведь он работает, так?
а раз не работает, то что-то у вас не так. все очевидное вроде неправильных урлов в настройках, отсутствия обновления пермалинков мы перебрали. значит, что-то не так с серверными настройками. разве не логично?
Извините, отвлекся. Мы уже выяснили в какой переменной окружения передается наличие https?
@flector, конечно нелогично.
Закачиваю на домен статичный сайт из 3-х php файлов, без базы.
Закачиваю туда такой htaccess<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule>Проверяю работу по HTTPS — всё ок.
Захожу на HTTP, получаю редирект на HTTPS — всё ок.Какая в данном случае проблема у хостера?
Её нет — логично?Закачиваю WP.
В htaccess добавляю строки, которые требует WP, в итоге получаем такой htaccess:<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule> # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPressПроверяем сайт по HTTPS — все ок.
Заходим на HTTP — получаем циклический редирект.
Что изменилось в отличие от статично сайта?
Поставили WP и дописали в htaccess строки, которые он требует.
Вывод — проблема в связке «WP — директивы htaccess» — логично?@yube, я конечно могу ошибаться, но разве в случае нормальной работы со статичным сайтом это важно?
Не подумайте что мне жалко, просто не понимаю какая может быть разница в какой переменной лежит признак HTTPS если без WP циклического редиректа нет, значит Apache понимает что юзер УЖЕ на HTTPS.
Скрин из phpinfo — http://prntscr.com/ew1e4xпросто не понимаю какая может быть разница в какой переменной лежит признак HTTPS
у WP есть функция is_ssl(), и она проверяет $_SERVER[‘HTTPS’] и порт 443. Если она не увидит ни одного из двух, она вернет false, и WP будет думать, что он не на SSL, а потому надо сделать редирект на https://.
p.s. Сам WP в принципе не может проверить, включено ли шифрование. Просто потому, что оно существует, так сказать, по другую сторону веб-сервера. WP остается только верить переменным окружения, отданным сервером.
Ребят, что-то я запутался совсем…
Не работают редиректы уже и на статичном сайте…Сейчас на сайте нативный htaccress
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPressЧто ему дописать чтобы появился редирект ?%)
Такой формат уводит сайт в цикл:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </IfModule> # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPressТакой формат работает с тем же эффектом:
RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTP:HTTPS} !=on [NC] RewriteCond %{REQUEST_URI} !robots.txt RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPressВот еще нерабочий вариант:
RewriteEngine On RewriteCond %{HTTP:SSL} !1 RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L,R=301] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress@flector, мое мнение о том что определенные директивы работают, когда я убираю
RewriteEngine On
ошибочны.
Редирект не начинает работать, просто когда я убираю это директиву и нажимаю обновить, URL в браузере УЖЕ с HTTPS.
Поэтому создается впечатление что редирект сработал, а на самом деле просто цикличность пропала.Сейчас проверил все найденные ранее конструкции редиректа БЕЗ директив WP в htaccess — ниодна не сработала.
Либо редиректа нет либо есть с зацикливанием.дык то, что вы там химичите с кодом wordpress в .htaccess ничего не значит, пока вы не обновите пермалинки в движке. wordpress не читает .htaccess — его читает апач. поэтому для пермалинков надо обновлять их в движке.
@flector, еще разок.
В какой момент и сколько раз нужно обновлять пермалинки и как?
Я уже раз 5 обновлял и пермалинки (нажимал кнопку «сохранить») и основную страницу настроек.
При ручном вводе HTTPS все ссылки работают корректно.
В пермалинках такая картина: http://prntscr.com/ew27yn
В основных настройках такая картина: http://prntscr.com/ew29a6В какой момент и сколько раз нужно обновлять пермалинки и как?
при любом изменении .htaccess.
сдается мне, что вы уже много чего наворотили — и в wp-config.php и в .htaccess и все вместе это у вас не работает.@flector, в wp-config.php изменения откатил, .htaccess тоже содержит только стандартные директивы WP.
Сейчас я добавил в htaccess Ваш код, получил:
RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTP:HTTPS} !=on [NC] RewriteCond %{REQUEST_URI} !robots.txt RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] #BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPressТолько появляется проблема — я не могу даже попасть в админку чтобы в пермалинках нажать сохранить, возникает та же ошибка с цикличными редиректами, даже на HTTPS…
-
Ответ изменён 8 лет, 8 месяцев назад пользователем
noindex.
Господа, проблема решена.
Пришел настоящий программист, понаступав часок на мои грабли, догадался покурить сайт хостера (Мастерхост)….В итоге заработало так (может кому в будущем пригодится):
RewriteEngine On RewriteCond %{HTTP:PORT} !^443$ RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]я вам сказу сказал — обратитесь к хостеру.
он бы вам ссылочку на свой FAQ сразу бы дал.
вы почему-то мне не поверили.а то, что у разных хостеров разные серверные настройки и редиректы на https настраиваются по разному — это факт. в копилку к timeweb теперь вот добавлю мастерхост с его редиректом по порту.
Господа, проблема решена.
Пришел настоящий программист, понаступав часок на мои грабли, догадался покурить сайт хостера (Мастерхост)….На всякий случай еще дадим пруфлинк
Документация хостера по этому поводу@flector, да, Вы были правы.
Но за многие годы работы, я слишком часто сталкивался с отписками саппорта в стиле «у нас всё ок, разбирайтесь в своём коде».
Так же было время, когда я создавал и возглавлял службу поддержки, в которой помимо руководства частенько «сидел» на первой-второй линии.
Так что знаю как это всё работает 🙂Поэтому перед обращением в «последнюю инстанцию» я всегда стараюсь найти железо-бетонные аргументы и перепробовать все варианты решения проблем без их участия.
В данном случае меня сбила с толку ситуация с мнимой работой после отключения директивыRewriteEngine On
в настройках WP.
Казалось что правильный редирект происходит, но на самом деле просто пропадала ошибка зацикленности и открывалась страница на которую уже привел зацикленный редирект.А к концу дня мозг уже на столько кипел, что не мог адекватно воспринимать ситуацию.
Если бы не @timurhamitov, думаю сейчас я бы уже писал в саппорт 🙂В любой случае спасибо за участие! 🙂
-
Ответ изменён 8 лет, 8 месяцев назад пользователем
Тема «Проблема с редиректом на HTTPS» закрыта для новых ответов.