Не работает изменение пути загрузки медиафайлов WordPress на поддомен
Я пытаюсь изменить расположение всех медиафайлов WordPress на поддомен, расположенный выше корня сайта (например, выше public_html). Я обновил настройки в wp-config.php
следующим образом:
define('UPLOADS', 'https://cdn.mysite.com/media');
И обновил URL изображений для существующих записей с помощью инструмента поиска и замены в PHPmyAdmin, например, заменив все:
mysite.com/wp-content/uploads/
наcdn.mysite.com/media/
Я также обновил таблицу wp-options, поля upload path и upload url path следующим образом:
- upload path
/myserverroot/user/cdn/media
- upload url path
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 '/путь/к/статике';
});
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
