Cambiar la ubicación de medios de WordPress y la ruta de subida a un subdominio no funciona
Estoy intentando cambiar la ubicación de todos los medios de WordPress a un subdominio ubicado por encima del directorio raíz del sitio, es decir, por encima de public_html. Actualicé los ajustes en wp-config.php
a:
define('UPLOADS', 'https://cdn.misitio.com/media');
Y actualicé las URLs de las imágenes en las entradas existentes usando la herramienta de buscar y reemplazar de PHPmyAdmin, por ejemplo, cambié todas las:
misitio.com/wp-content/uploads/
porcdn.misitio.com/media/
También actualicé la tabla wp-options, los campos de ruta de subida y ruta URL de subida como se muestra:
- ruta de subida
/ruta_del_servidor/usuario/cdn/media
- ruta URL de subida
https://cdn.misitio.com/media/
Sin embargo, al actualizar las páginas veo que faltan todos los medios, y al revisar el HTML de las etiquetas IMG veo que la URL src tiene antepuesta la URL base del sitio web así:
img src="https://misitio.com/https://cdn.misitio.com/media/2019/9/imagen.jpg"
¿Alguna idea sobre cuál podría ser la causa? Muchas gracias.

Esto no funcionará como estás pensando. WordPress intentará subir archivos adjuntos (imágenes, PDFs, etc.) a tu servidor usando la constante UPLOADS
, esta ruta es una ruta de archivo, local al servidor.
Si deseas usar una CDN, puedes contratar un servicio de CDN para hacer esto (gestionar archivos y subirlos remotamente a su servicio) o posiblemente usar una herramienta como esta para reescribir URLs sobre la marcha.
No puedo decir qué tan bueno es este plugin, pero parece que podría hacer lo que estás buscando, subir tus archivos adjuntos a otro servidor (remoto).

Para cambiar la ruta de los archivos multimedia, puedes modificar la ruta mediante un hook o directamente en la base de datos. Sin embargo, una técnica sólida en WordPress es utilizar un plugin simple que active el hook y cambie la ruta de los archivos multimedia.
Las entradas se encuentran en la tabla _options
, en los campos upload_path
y upload_url_path
. Puedes establecer una nueva ruta en la base de datos o usar el siguiente fragmento de código para modificarlos con la ayuda de los hooks.
add_filter( 'pre_option_upload_path', function( $upload_path ) {
return '/ruta/hacia/estaticos';
});
add_filter( 'pre_option_upload_url_path', function( $upload_url_path ) {
return 'http://estaticos.ejemplo.org';
});
El contenido existente debe buscarse y reemplazarse para que todos los archivos multimedia tengan la ruta correcta dentro del contenido de cada entrada/página en la base de datos. Encontrarás todo el contenido, incluyendo las URLs/Rutas de los archivos multimedia, en la tabla _posts
.

Prueba esto primero en un sitio web de demostración.
Deja el upload_path
vacío.
Cambia el upload_url_path
a tu subdominio.
En phpmyadmin usa el siguiente código para actualizar las imágenes ya subidas que están adjuntas en las publicaciones. Cambia wp_posts por el prefijo de tu base de datos y tus nombres de dominio
UPDATE wp_posts SET post_content = replace(post_content, 'https://mydemodomain.gr/wp-content/uploads/', 'https://images.mydemodomain.gr/uploads/');
Y finalmente en el htaccess
RedirectMatch 301 ^/wp-content/uploads/(.*)$ https://images.mydemodomain.gr/$1
