Предупреждения о смешанном контенте после смены адреса сайта с HTTP на HTTPS

4 апр. 2017 г., 18:35:15
Просмотры: 17.9K
Голосов: 5

Я изменил адрес сайта с HTTP на HTTPS, просто поменяв URL в Настройках → Общие (Адрес WordPress и Адрес сайта). В админ-панели нет никаких проблем, всё работает отлично.

Однако на публичной части сайта появилось много "смешанного контента", из-за чего Firefox предупреждает, что сайт небезопасен. Я заметил (через просмотр исходного кода), что почти все изображения, загруженные в медиабиблиотеку, по-прежнему используют HTTP вместо HTTPS.

Что можно сделать, чтобы изображения, шрифты и другие ресурсы загружались по HTTPS?

[ОБНОВЛЕНИЕ] Я обнаружил, что некоторые проблемы можно исправить, отредактировав два файла темы с жёстко прописанными "http://". Основная проблема с изображениями — если не изменять базу данных, решения, видимо, нет.

0
Все ответы на вопрос 5
14

Это происходит потому, что WordPress по умолчанию сохраняет URL-адреса в контенте в абсолютном виде (то есть в базе данных ваши ссылки сохраняются как http://example.com). Чтобы исправить это, вам нужно выполнить поиск и замену в вашей базе данных.

Я предпочитаю использовать плагин Better Search Replace, потому что в нем есть удобная функция для тестового запуска поиска и замены. Существует множество других методов поиска и замены, и вы также можете внести изменения через PhpMyAdmin, но я приведу инструкции именно для плагина Better Search Replace.

Предположим, вы используете Better Search Replace:

  1. СДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ БАЗЫ ДАННЫХ! Всегда, всегда, всегда. Используйте любой удобный инструмент (UpdraftPlus, экспорт (НЕ УДАЛЕНИЕ) через PhpMyAdmin или прямо из MySQL — все это варианты).
  2. Перейдите в Инструменты → Better Search Replace
  3. В поле поиска укажите версию вашего сайта без SSL (например, http://example.com), а в поле замены — версию с SSL Пример поиска и замены 1
  4. Выберите таблицы, которые нужно обновить. Скорее всего, вам понадобятся только wp_posts и wp_postmeta, но можно выбрать и все. Учтите, что это может занять больше времени или привести к таймауту в зависимости от характеристик вашего сервера.Выбор таблиц
  5. Выполните тестовый запуск, чтобы убедиться, что все работает корректно Тестовый запуск
  6. Если все в порядке, снимите галочку с опции тестового запуска и выполните замену.
  7. Проверьте сайт, чтобы убедиться, что ошибки устранены. Если да — отлично!

Примечание: При выполнении поиска и замены всегда есть риск серьезно повредить сайт. Поэтому так важен первый шаг — резервное копирование. Если что-то пойдет не так, у вас будет возможность восстановить данные.

4 апр. 2017 г. 19:04:10
Комментарии

Недавно я перешел на SSL, и плагин Better Search Replace просто спас меня. Не забудьте сделать резервную копию базы данных перед использованием.

Christine Cooper Christine Cooper
4 апр. 2017 г. 19:23:52

@Ian Я очень удивлен и разочарован в WP, если для этого требуется подобное решение.

3000 3000
4 апр. 2017 г. 19:44:58

Да, способ, которым WP сохраняет URL, особенно для ассетов, крайне раздражает.

Ian Ian
4 апр. 2017 г. 19:46:05

Итак, что (черт возьми) делает WP, когда вы заменяете http на https в Настройки > Общие?

3000 3000
4 апр. 2017 г. 19:52:40

минусую, потому что просто замена текста в записях — это, с одной стороны, слишком много (вы ссылаетесь на http-URL PDF на своем сайте и хотите оставить его http), а с другой — может быть недостаточно (вы встраиваете изображение по http с другого сайта).

Mark Kaplun Mark Kaplun
5 апр. 2017 г. 12:12:14

@MarkKaplun Я действительно удивлен поведением WP в этом случае: полагаю, это произойдет, даже если вы возьмете свою базу данных и переместите весь сайт на другой домен. Честно говоря, это требует слишком много работы

3000 3000
5 апр. 2017 г. 12:21:28

@3000 на самом деле люди, которые говорят вам "просто используй Let's Encrypt" или что-то подобное, продают вам змеиное масло. HTTPS — это сложно по разным причинам. Например, вам может понадобиться использовать какую-то JS-библиотеку, которая доступна только по HTTP, и она перестанет работать на HTTPS (это реальная проблема, с которой столкнулся мой клиент). Чтобы полностью перейти на HTTPS, недостаточно правильно обработать внутренние URL, но и те внешние ресурсы, которые используются на вашем сайте. Обычно это может потребовать просто замены HTTP на HTTPS...

Mark Kaplun Mark Kaplun
5 апр. 2017 г. 12:30:57

...(если это поддерживается), но для некоторых ресурсов вам понадобится использовать совершенно другой URL, чтобы получить тот же контент. В итоге, это совсем нетривиально, и нет универсального решения. Поэтому, даже если бы ядро WordPress хотело бы это обработать, по сути, нет способа сделать это правильно для всех. Лично я просто игнорирую предупреждения о смешанном контенте — их влияние на безопасность незначительно, если вы входите в систему через HTTPS, а убрать их все крайне сложно.

Mark Kaplun Mark Kaplun
5 апр. 2017 г. 12:33:27

Изменение изображений на использование нейтрального протокола (без указания HTTP/HTTPS) — это, наверное, самый простой и значимый шаг, который вы можете сделать в этом направлении. Это можно сделать с помощью небольшого сниппета или поиска и замены, но только того, что конкретно касается URL медиафайлов.

Mark Kaplun Mark Kaplun
5 апр. 2017 г. 12:35:19

@MarkKaplun 99% моей текущей проблемы связано с изображениями: я обнаружил некоторые HTTP-URL для внешних ресурсов (JS и шрифты), но проверил и их можно легко заменить на HTTPS. Я занимаюсь разработкой (других вещей) годами и, как разработчик, считаю эту проблему с путями действительно "удивительной", чтобы не сказать невероятной

3000 3000
5 апр. 2017 г. 12:59:27

@300 отчасти это результат того, что ядро так и не завершило (уже очень старый) план по включению миграции на другие корневые URL в состав ядра. Если бы такой инструмент существовал, хотя бы часть боли можно было бы избежать.

Mark Kaplun Mark Kaplun
5 апр. 2017 г. 13:08:20

@Mark Kaplun На самом деле, изначально я думал, что проблема решается простым редактированием URL в общих настройках (и, конечно, редиректом на HTTPS), но я ошибался

3000 3000
5 апр. 2017 г. 13:18:15

Совершенно не понимаю, за что минусуют. Это абсолютно правильный ответ, даже если он не такой, как хотел бы автор вопроса. Учитывая важность SSL в наши дни, особенно для SEO, это хороший способ избавиться от предупреждений о смешанном содержимом. Есть другие ответы на этот вопрос, которые не используют метод поиска и замены - отлично! Вся суть этого сайта - предоставлять качественные вопросы и ответы, чтобы помогать друг другу!

Ian Ian
5 апр. 2017 г. 16:26:58

@Ian Если это может быть полезно: я пробовал очень похожие вещи, которые вы описали, просто используя функцию поиска в PHPMyAdmin и замену в MySQL. В моем случае затронутыми оказались только таблицы wp_posts (тысячи записей), wp_options и wp_usermetas (очень мало записей). Кроме того, я нашел очень интересный комментарий здесь: http://wordpress.stackexchange.com/questions/90206/wp-posts-guid-update (тот, что на желтом фоне) :-)

3000 3000
7 апр. 2017 г. 19:25:31
Показать остальные 9 комментариев
5

Вам потребуется перенаправить весь трафик с HTTP на HTTPS. Это можно сделать с помощью правила перезаписи. Используйте следующий код вместо оригинального правила перезаписи WordPress (если вы не используете кеширование) в вашем файле .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Существуют также плагины, которые могут сделать это за вас, например Easy HTTPS Redirection.

4 апр. 2017 г. 19:02:31
Комментарии

Это действительно хороший способ обойтись без вмешательства в базу данных!

Ian Ian
4 апр. 2017 г. 19:05:22

@Jack Johansson Я перенаправляю сайт таким образом, но есть и смешанный контент. По какой-то причине пути к изображениям должны быть жёстко прописаны где-то (я не могу найти, где именно это "где-то" находится) :-)

3000 3000
4 апр. 2017 г. 19:41:39

@3000 Изображения находятся на том же домене, что и у вас? Даже если они жёстко прописаны, правило перезаписи должно их перенаправлять. Вы используете CDN какого-либо типа?

Johansson Johansson
4 апр. 2017 г. 19:43:18

@JackJohansson Я заметил, что у меня три вида проблем: изображения (на том же домене), шрифты (CDN) и виджет Flickr, который больше не работает (также загружается с внешнего http-адреса)

3000 3000
4 апр. 2017 г. 19:46:34

Это сработает для перенаправления URL (и это хорошая идея, если вы переходите на полностью HTTPS), но на этом этапе уже слишком поздно предотвращать предупреждения о смешанном содержимом. URL на странице изначально должен быть HTTPS.

Matthew Crumley Matthew Crumley
4 апр. 2017 г. 23:08:26
0

Я использовал Better Search Replace и Really Simple SSL, и победителем стал:

Really Simple SSL

Просто сделайте следующее:

  1. Установите его
  2. Активируйте
  3. Разрешите SSL

Готово

Он также исправил все проблемы с перенаправлением изображений

15 янв. 2019 г. 11:44:31
2
-1

Установите этот плагин: https://wordpress.org/plugins/http-https-remover/

Несмотря на название - HTTP / HTTPS Remover - последняя версия принудительно преобразует все http в https, и предупреждения о смешанном содержимом исчезнут.

4 апр. 2017 г. 19:03:40
Комментарии

Проблема с таким плагином в следующем: я должен понимать, что он делает "на низком уровне" (если плагин сломает мой сайт, мне придётся создавать сайт заново)

3000 3000
4 апр. 2017 г. 19:50:48

Минусую, потому что в текущем виде это не очень полезный ответ. Возможно, это лучший плагин для решения проблемы, но читатели ответа должны получить чёткое представление о том, что он делает и как

Mark Kaplun Mark Kaplun
5 апр. 2017 г. 12:01:51
5
-1

Я только в прошлую пятницу перевел сайт моей компании на исключительно защищенную версию. Я использовал плагин Really Simple SSL, а затем добавил 301 редирект в мой .htaccess файл.

RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Не забудьте также подтвердить HTTPS-версию вашего сайта в Инструментах для веб-мастеров / Search Console

4 апр. 2017 г. 19:12:38
Комментарии

перенаправление в файл .htaccess???

3000 3000
4 апр. 2017 г. 19:48:55

Я добавил код в свой .htaccess файл, который должен перенаправлять все с http на https.

fwho fwho
4 апр. 2017 г. 19:51:47

В любом случае, этот код не работает у меня: изображения и т.д. всё ещё загружаются по http:// вместо https://. Я предполагаю - поправьте, если я ошибаюсь - что это проблема с кешем

3000 3000
4 апр. 2017 г. 20:30:13

Возможно, я ошибаюсь, но мне кажется, что изображение не будет кэшироваться и загружаться по https с незащищённой версии. Вы указываете полный URL, например http://example.com/image.png, прямо в тексте?

fwho fwho
4 апр. 2017 г. 20:41:01

WordPress автоматически создаёт ссылки с префиксом http://: я скачал базу данных, и такие ссылки встречаются повсюду

3000 3000
5 апр. 2017 г. 09:27:07