Как правильно настроить редирект на https и заменить все ссылки в контенте записей?
Вопрос в целом не сложный вроде, я это уже делал как-то раз, но вот на очередном сайте хотелось бы послушать ваш вариант...
Я уже установил ssl на сервере, т.е. сайт уже работает с ssl. Теперь нужно правильно настроить редирект с http на https, и заменить все ссылки с http на https в текстах записей.
Где нужно было, в шаблоне все ссылки я уже заменил на относительные или на ссылки без протокола (//url).
Редиректы
Редирект наверное лучше всего настроить через .htaccess, путем вставки такой конструкции перед правилами WordPress. А лучше перед всеми правилами, т.е. в самое начало файла:
Еще вариант:
Еще вариант:
Еще вариант:
Тут важно, что устанавливается 301 редирект, в сети посмотрел эту тему, кое-где его не используют, а он нужен!
Также, можно установить редирект в PHP, вместе с редиректом c .htaccess. Пригодится, если по какой-то причине редирект с апача слетит, чтобы PHP был на подстраховке...
Изменение URL в контенте
В сети видел предложения заменять http на https прямо в базе данных. Я думаю это не лучшее решение, потому что возможно в будущем вы откажетесь от SSL и тогда нужно будет все менять обратно... Поэтому лучше делать замену на лету, таким кодом (он быстрый):
Как вы, наверное, понимаете функцию replace_url_to_https() можно будет применить к любому тексту, где нужно заменить
текст http://ваш-сайт.ru/* текст
натекст https://ваш-сайт.ru/* текст
. Она меняет все без разбора, будь то картинки или что-то еще, но только для URL относящихся к текущему домену...Изменение URL других ссылок
Вообще WordPress автоматически подстраивается под https протокол текущей страницы и все ссылки должны измениться автоматом. Поэтому нет необходимости изменять даже протоколы в ссылках: URL сайта и URL WordPress (в настройках). Их протокол меняется налету...
Но если этого не произошло (протокол страницы https, но в ней есть ссылки http), то для смены протокола отдельных ссылок в WP есть функция set_url_scheme().
Пример:
Корневая функция на основе которой ставиться протокол всех ссылок - это is_ssl(). Влияя на нее мы может влиять на все ссылки, при условии, что они жестко не прописаны в HTML, а выводятся через различные функции WordPress. Например, следующим кодом мы можем, жестко указать протокол https для всех ссылок на странице, даже если протокол страницы http:
Вызвать такой код нужно как можно раньше, до подключения плагинов. И наверное перед его вызовом нужно сделать какие-то проверки. Этот код - это просто пример...
Плагины
Как обычно, можно использовать плагины (я их не пробовал)...
Easy HTTPS Redirection - заглянул в код, вроде бы как раз то что вам нужно...
WordPress HTTPS (SSL) - вроде тоже хорош, правда не обновляется уже давно. Он, как я понял, заменяет все ссылки во всем HTML документе, работает как комбаин: много лишних операций, но может это и нужно, потому что удобно...