Вопрос или проблема
Я пытаюсь изменить место расположения всех медиафайлов 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
), важно уточнить, что настройка, которую вы применили, может быть неэффективной по нескольким причинам. Давайте проанализируем ваши действия и предложим решения.
Основные причины проблемы
-
Неверное использование константы
UPLOADS
.
КонстантаUPLOADS
в файлеwp-config.php
задает локальный путь к файлам, который не должен включать URL. В вашем случае:define('UPLOADS', 'https://cdn.mysite.com/media');
Здесь вы указываете URL, что неправильно. Вместо этого, вам необходимо указать физический путь на сервере, например:
define('UPLOADS', 'myserverroot/user/cdn/media');
-
Обновление URL медиафайлов.
После того как вы обновили изображения в базе данных с помощью инструмента поиска и замены в phpMyAdmin, проверьте, что замены выполнены корректно. Например:UPDATE wp_posts SET post_content = replace(post_content, 'https://mysite.com/wp-content/uploads/', 'https://cdn.mysite.com/media/');
-
Настройки в таблице wp_options.
Обязательно проверьте, что у вас корректно заданы значения в таблицеwp_options
:upload_path
— укажите локальный путь, например:/myserverroot/user/cdn/media
upload_url_path
— укажите URL, например:https://cdn.mysite.com/media/
Решения
-
Использование плагина для CDN.
Вы можете рассмотреть возможность использования плагинов для работы с CDN, таких как WP Offload Media или других. Эти плагины автоматически перенаправляют медиафайлы на CDN и упрощают процесс управления. -
Корректная настройка через хуки.
Если вы предпочитаете вручную контролировать пути, можете использовать хуки для изменения данных: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/'; });
-
Обновление .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 и минимизации потенциальных проблем. Убедившись, что все пути определены корректно и обновлены, вы сможете без проблем использовать вашу медиа-библиотеку на новом поддомене.