Ссылки на медиабиблиотеку сломаны в WordPress Multisite после обновления SSL

Вопрос или проблема

Мы обновили (не добавили) SSL на сайте

Медиа в медиа-библиотеке сетевого администратора работает хорошо, но медиа-библиотека для подсайтов отображает серый квадрат

например: URL изображения выглядит так: (при прямом доступе к этому URL сервер выдает ошибку 404, а не страницу 404 WordPress)

https://domain.com/blog/multisitedomain/wp-content/uploads/sites/2/2020/09/image-file.png

разбивая это, у нас есть

https://domain.com/blog                            -> основной URL блога
/multisitedomain                                   -> виртуальный домен, созданный мультисайтом
/wp-content/uploads/sites/2/2020/09/image-file.png -> относительный путь к изображению

истинный путь к изображению (если вы попытаетесь получить доступ к изображению здесь, оно работает)

https://domain.com/blog/wp-content/uploads/sites/2/2020/09/image-file.png

это то же самое, что и выше, но без виртуального домена

Файлы загружаются нормально (в папку без подсайта), но возвращаемый URL настроен на использование подсайта (если вы уберете подсайт, они будут там, но так, как указано, их нет)

У них у всех есть пути https, но сайт не правильно находит изображения при использовании пути /subdomain

Я сравнил .htaccess с другим мультисайтом, который находится на другом сервере, и сравнил его с резервной версией, изменений нет, и они кажутся одинаковыми. Он стал нерабочим только после обновления SSL

Есть ли что-то, что нужно сделать на стороне сервера, что мы пропустили при обновлении SSL? Или могла ли серверная настройка быть сброшена/изменена в процессе (я не делал обновление, поэтому не уверен, какие шаги были предприняты), что могло бы сломать мультисайт, но не “часть сетевого администратора” (или другие сайты WordPress без мультисайта на том же сервере)

Я создал временное JavaScript-решение для изменения URL изображений, если они не найдены на фронтенде, но поскольку медиа-библиотека загружается через

База данных WP для медиафайлов хранит полный URL медиафайла. Если медиафайл был загружен, когда сайт был без SSL, в базе данных хранится URL без SSL.

Когда вы переходите на SSL, новые медиафайлы получают SSL-адрес. Так что вам нужно найти способ пройти через базу данных и поменять все вхождения http://www.example.com на https://www.example.com.

Вы можете сделать это напрямую в базе данных или использовать плагин для поиска и замены, чтобы сделать это за вас. Я использую плагин Better Search and Replace, который всегда хорошо работал для меня. Плагин выполнит необходимые изменения для всей базы данных, включая базу данных постов, где хранятся данные (включая полный URL медиафайлов).

Добавлено

Очевидно, как указано в первом комментарии, мой ответ не соответствует вопросу. Не знаю, почему это произошло, но… [вздох]

Я хотел бы увидеть URL, который находится в сгенерированной странице. Я также хотел бы увидеть файл htaccess, чтобы узнать, связано ли это с проблемой. Хотя в вопросе показан работающий URL, не указано, какой URL находится в сгенерированном документе. Или URL, который вызвал 404.

Мне также было бы интересно узнать о двух URL в таблице wp-options. И любые wp-settings.php, которые переопределяют эти два URL wp-options.

Вы можете попробовать посмотреть на вкладку Сеть сгенерированной страницы (в инструментах разработчика браузера), чтобы определить “кусок” сгенерированной страницы, который вызывает 404. Возможно, этот URL не формируется правильно.

Дополнительная информация, как упоминалось выше, была бы полезна.

Ответ или решение

Обновление SSL на вашем сайте WordPress Multisite может приводить к проблемам с доступом к медиафайлам на поддоменах, особенно если полные URL-адреса медиафайлов не были обновлены с HTTP на HTTPS в базе данных. Давайте рассмотрим возможные причины и пути решения данной проблемы.

Анализ проблемы

  1. Оценка структуры URL:
    Из представленных URL видно, что проблема заключается в том, что медиафайлы, размещенные на поддоменах, пытаются загружаться с некорректным путем URL:

    • Корректный путь: https://domain.com/blog/wp-content/uploads/sites/2/2020/09/image-file.png
    • Некорректный путь: https://domain.com/blog/multisitedomain/wp-content/uploads/sites/2/2020/09/image-file.png

    Здесь стоит отметить, что URL с поддоменом не загружается, хотя доступны другие URL в системе, такие как https://domain.com/blog/wp-content/uploads/..., которые корректны.

  2. Содержимое базы данных:
    Вероятно, после обновления на SSL в базе данных все медиафайлы, загруженные до обновления SSL, могли иметь устаревшие HTTP-ссылки. Это означает, что медиафайлы, загруженные после обновления, будут корректно отображаться, так как они будут иметь HTTPS URL.

Решения для исправления ситуации

  1. Обновление URL-адресов в базе данных:
    Нужно произвести поиск и замену всех старых HTTP URL на HTTPS в базе данных. Это можно сделать несколькими способами:

    • Плагин для замены: Например, используйте плагин Better Search Replace, который позволяет искать строки в базе данных и заменять их на другие. Убедитесь, что вы создаете резервную копию базы данных перед изменениями.
    • SQL-запросы: Если вы комфортно чувствуете себя с SQL, вы можете использовать запрос для обновления:
      UPDATE wp_posts SET guid = replace(guid, 'http://domain.com', 'https://domain.com');
      UPDATE wp_posts SET post_content = replace(post_content, 'http://domain.com', 'https://domain.com');

      Не забудьте заменить wp_ префиксы на актуальный для вашей базы данных.

  2. Проверка конфигурации .htaccess и сетевых настроек:
    Убедитесь, что конфигурация файла .htaccess соответствует рекомендациям WordPress для многосайтовой сети, особенно после обновления SSL. Обычно необходимо добавить следующие строки:

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
  3. Проверка параметров в wp_options и wp_site:
    Проверьте значения siteurl и home в таблице wp_options и убедитесь, что они правильно указывают на HTTPS версии. Также проверьте таблицу wp_site.

  4. Использование инструмента разработчика:
    Используйте инструменты разработчика вашего браузера (F12), чтобы просмотреть консоль и сеть, чтобы выявить конкретные запросы, отправляемые на сервер, и, возможно, обнаружить, какие именно URL не работают.

Заключение

На основе вышеизложенного, после обновления SSL следует проверить URL-адреса медиафайлов в базе данных, конфигурацию .htaccess и параметры в wp_options. Запуск этих шагов поможет вам восстановить корректный доступ к медиафайлам на ваших поддоменах. Если проблема остается нерешенной, возможно, стоит обратиться к хостинг-провайдеру для дополнительной диагностики серверных настроек, которые могли быть изменены.

Оцените материал
Добавить комментарий

Капча загружается...