Изменение местоположения медиафайлов WordPress и пути загрузки на поддомен не работает

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

Я пытаюсь изменить место расположения всех медиафайлов WordPress на подсайта, расположенного выше корня сайта, т.е. выше public_html. Я обновил настройки wp-config.php на:

define('UPLOADS', 'https://cdn.mysite.com/media');

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

  • mysite.com/wp-content/uploads/ URL на
  • cdn.mysite.com/media/

Я также обновил таблицу wp-options, поля пути загрузки и пути URL загрузки, как показано ниже:

  • путь загрузки /myserverroot/user/cdn/media
  • путь URL загрузки https://cdn.mysite.com/media/

Однако при обновлении веб-страниц я вижу, что все медиафайлы отсутствуют, и когда я проверяю HTML тега IMG, я вижу, что URL src предшествуется базовым URL сайта, как показано ниже:

img src="https:// mysite.com/https://cdn.mysite.com/media/2019/9/image.jpg"

Есть идеи, в чем может быть проблема? Большое спасибо.

Это не будет работать так, как вы думаете. WordPress попытается загрузить вложения (изображения, PDF и т.д.) на ваш сервер, используя константу UPLOADS, этот путь является файловым путем, локальным для сервера.


Если вы хотите использовать CDN, вы можете получить CDN-сервис для этого (управлять файлами и загружать их на свой сервис удаленно) или, возможно, использовать инструмент как этот для переписывания URL на лету.

Я не могу сказать, насколько хорош этот плагин, но кажется, что он может сделать то, что вам нужно, загрузить ваши вложения на другой (удаленный) сервер.

Чтобы изменить путь к медиафайлу, вы можете изменить путь через хуки или непосредственно в базе данных. Однако надежный путь с использованием технологии WordPress – это простой плагин, который активирует хук и изменяет путь медиафайлов.

Записи находятся в таблице _options, записи upload_path и upload_url_path. Вы можете установить в базе данных новый путь или использовать следующий код, чтобы изменить их с помощью хуков.

add_filter( 'pre_option_upload_path', function( $upload_path ) {
    return '/path/to/static';
});

add_filter( 'pre_option_upload_url_path', function( $upload_url_path ) {
    return 'http://static.example.org';
});

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

Попробуйте это сначала на демо-сайте.

Оставьте upload_path пустым.

Измените upload_url_path на ваш подсайт.

В phpmyadmin используйте код ниже, чтобы обновить уже загруженные изображения, прикрепленные к записям. Измените wp_posts с вашим префиксом базы данных и вашими доменными именами.

UPDATE wp_posts SET post_content = replace(post_content, 'https://mydemodomain.gr/wp-content/uploads/', 'https://images.mydemodomain.gr/uploads/');

И, наконец, в htaccess

RedirectMatch 301 ^/wp-content/uploads/(.*)$ https://images.mydemodomain.gr/$1

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

Когда вы пытаетесь изменить путь загрузки медиафайлов WordPress на поддомен, который расположен выше корня сайта (например, выше public_html), важно уточнить, что настройка, которую вы применили, может быть неэффективной по нескольким причинам. Давайте проанализируем ваши действия и предложим решения.

Основные причины проблемы

  1. Неверное использование константы UPLOADS.
    Константа UPLOADS в файле wp-config.php задает локальный путь к файлам, который не должен включать URL. В вашем случае:

    define('UPLOADS', 'https://cdn.mysite.com/media');

    Здесь вы указываете URL, что неправильно. Вместо этого, вам необходимо указать физический путь на сервере, например:

    define('UPLOADS', 'myserverroot/user/cdn/media');
  2. Обновление URL медиафайлов.
    После того как вы обновили изображения в базе данных с помощью инструмента поиска и замены в phpMyAdmin, проверьте, что замены выполнены корректно. Например:

    UPDATE wp_posts SET post_content = replace(post_content, 'https://mysite.com/wp-content/uploads/', 'https://cdn.mysite.com/media/');
  3. Настройки в таблице wp_options.
    Обязательно проверьте, что у вас корректно заданы значения в таблице wp_options:

    • upload_path — укажите локальный путь, например: /myserverroot/user/cdn/media
    • upload_url_path — укажите URL, например: https://cdn.mysite.com/media/

Решения

  1. Использование плагина для CDN.
    Вы можете рассмотреть возможность использования плагинов для работы с CDN, таких как WP Offload Media или других. Эти плагины автоматически перенаправляют медиафайлы на CDN и упрощают процесс управления.

  2. Корректная настройка через хуки.
    Если вы предпочитаете вручную контролировать пути, можете использовать хуки для изменения данных:

    add_filter('pre_option_upload_path', function() {
       return '/myserverroot/user/cdn/media';
    });
    
    add_filter('pre_option_upload_url_path', function() {
       return 'https://cdn.mysite.com/media/';
    });
  3. Обновление .htaccess для перенаправления.
    Чтобы избежать проблем с URL медиафайлов, добавьте следующую строку в файл .htaccess:

    RedirectMatch 301 ^/wp-content/uploads/(.*)$ https://cdn.mysite.com/media/$1

Тестирование и отладка

Перед применением всех изменений рекомендуется протестировать их на тестовом сайте, чтобы избежать потери данных. Включите отладку WordPress, добавив в файл wp-config.php следующие строки:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Это позволит вам просматривать ошибки в файле debug.log в папке wp-content.

Заключение

Изменение пути загрузки медиафайлов может быть сложным процессом, но с правильными настройками и инструментами это вполне реально. Настоятельно рекомендуется использовать плагины для упрощения интеграции с CDN и минимизации потенциальных проблем. Убедившись, что все пути определены корректно и обновлены, вы сможете без проблем использовать вашу медиа-библиотеку на новом поддомене.

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

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