Advertencias de contenido mixto después de cambiar la dirección del sitio de HTTP a HTTPS
Cambié la dirección de mi sitio de HTTP a HTTPS simplemente modificando la URL en Ajustes -> General (Dirección de WordPress y Dirección del sitio). No hay ningún problema en el área de administración, todo funciona correctamente.
Lo que ocurre en la parte pública del sitio web: hay mucho "contenido mixto", por lo que Firefox indica que el sitio no es seguro. Noté (al ver el código fuente) que casi todas las imágenes que he subido a la galería multimedia todavía se "renderizan" con HTTP en lugar de HTTPS.
¿Qué puedo hacer para servir las imágenes, fuentes, etc. con una URL HTTPS?
[ACTUALIZACIÓN] Encontré que algunos problemas se pueden solucionar editando dos archivos del tema que tenían "http://" escrito directamente. El problema principal son las imágenes; si no quieres modificar la base de datos, aparentemente no hay solución.
Esto ocurre porque WordPress guarda las URLs en el contenido de forma absoluta por defecto (lo que significa que en realidad tiene tus URLs guardadas como http://ejemplo.com en la base de datos). Para solucionarlo, necesitarás ejecutar una búsqueda y reemplazo en tu base de datos para corregir esos errores.
Me gusta usar el plugin Better Search Replace porque tiene una función útil que te permite probar tu búsqueda/reemplazo en modo de prueba. Hay muchos otros métodos de búsqueda/reemplazo, e incluso podrías hacer los cambios directamente en PhpMyAdmin, pero aquí solo daré instrucciones para usar el plugin Better Search Replace.
Asumiendo que estás usando Better Search Replace:
- ¡HAZ UNA COPIA DE SEGURIDAD DE TU BASE DE DATOS! Siempre, siempre, siempre. Usa cualquier herramienta que prefieras para esto (UpdraftPlus, exportarla (NO ELIMINARLA) desde PhpMyAdmin o directamente desde MySQL son algunas opciones).
- Ve a Herramientas > Better Search Replace
- Agrega la versión no SSL de tu sitio web en el campo de búsqueda (ej.
http://ejemplo.com
) y la versión SSL de tu sitio web en el campo de reemplazo - Selecciona las tablas que deseas actualizar. Lo más probable es que solo necesites las tablas
wp_posts
ywp_postmeta
, pero puedes seleccionarlas todas si lo prefieres. Solo ten en cuenta que podría tomar más tiempo y agotar el tiempo de espera dependiendo de las especificaciones de tu servidor. - Ejecuta una prueba en seco para asegurarte de que funcione
- Si funciona, desmarca la opción de prueba en seco y ejecútalo de verdad.
- Revisa tu sitio web para verificar que los errores se hayan corregido. Si es así, ¡genial!
Nota: Cada vez que realizas una búsqueda/reemplazo, existe la posibilidad de causar problemas graves en tu sitio web. De ahí el primer paso: hacer una copia de seguridad. Si algo sale mal, tendrás una forma de restaurar tus datos.

Recientemente actualicé a SSL y Better Search Replace fue un cambio radical. Haz una copia de seguridad de tu base de datos antes de usarlo.

@Ian Estoy realmente sorprendido, y muy decepcionado con WP si se requiere una solución como esta

Sí, la forma en que WP guarda las URLs, especialmente para los recursos, es súper molesta.

Entonces, ¿qué (diablos) hace WordPress cuando reemplazas http por https en Ajustes > Generales?

Votado negativo porque simplemente reemplazar texto en las publicaciones es demasiado por un lado (si enlazas a una URL http de un pdf en tu sitio y quieres mantenerlo como http), y podría no ser suficiente (si incrustas una imagen via http desde otro sitio).

@MarkKaplun Estoy realmente sorprendido por el comportamiento de WP en este caso: supongo que esto pasaría incluso si tomas tu base de datos y mueves todo el sitio web a otro dominio. Honestamente, requiere demasiado trabajo

@3000 en realidad las personas que te dicen "solo usa Let's Encrypt" o cosas por el estilo, simplemente te venden humo. HTTPS es complicado por todo tipo de razones, por ejemplo podrías necesitar usar alguna biblioteca JS que solo se sirve en HTTP, lo que dejará de funcionar en HTTPS (de hecho, es un problema que tuvo un cliente mío). Para ser completamente HTTPS no basta con manejar correctamente tus URLs internas, sino también las de los recursos externos utilizados en tu sitio, que generalmente pueden requerir solo cambiar HTTP a HTTPS...

...(si es compatible) pero para algunos necesitarás usar una URL totalmente diferente para obtener el mismo recurso. En resumen, no es nada trivial y no hay una "solución única para todos", por lo que incluso si el núcleo hubiera querido manejarlo, básicamente no hay manera de hacerlo bien para todos. Personalmente, simplemente ignoro las advertencias de contenido mixto, sus implicaciones de seguridad son insignificantes si inicias sesión a través de HTTPS y es extremadamente difícil limpiarlas todas.

cambiar las imágenes para usar protocolo neutral es probablemente la victoria más fácil y grande que puedes tener en este frente, y puedes hacerlo con un pequeño fragmento de código o mediante búsqueda y reemplazo, pero uno que apunte específicamente a las URLs de medios.

@MarkKaplun El 99% de mi problema actual es con las imágenes: encontré algunas URLs http para recursos externos (JS y fuentes) pero verifiqué y se pueden reemplazar fácilmente con https. He estado desarrollando (otras cosas) durante años y, como desarrollador, siento que este problema de rutas es realmente algo "sorprendente", por no decir increíble

@300 en parte esto es el resultado de que el núcleo nunca completó el (ya muy antiguo) plan de tener una migración a otra URL raíz como parte del núcleo. Si existiera tal herramienta al menos parte del dolor no estaría ahí.

@Mark Kaplun De hecho, inicialmente pensé que era solo cuestión de editar la URL en los ajustes generales (y por supuesto redirigir a https), pero estaba equivocado

Definitivamente no entiendo el voto negativo. Esta es una respuesta legítima, incluso si no es lo que el OP esperaba. Dada la importancia de SSL hoy en día, especialmente para SEO, esta es una buena manera de solucionar esas advertencias de contenido mixto. Hay otras respuestas en esta pregunta que no usan el método de buscar y reemplazar, ¡genial! ¡El propósito principal de este sitio web es proporcionar preguntas y respuestas de alta calidad para ayudarnos mutuamente!

@Ian Si esto puede ser útil, probé cosas muy similares a las que explicas simplemente usando la función de búsqueda dentro de PHPMyAdmin y un reemplazo MySQL. En mi caso, las únicas tablas afectadas son wp_posts (miles), wp_options y wp_usermetas (muy pocas entradas). Además, encontré un comentario muy interesante aquí: http://wordpress.stackexchange.com/questions/90206/wp-posts-guid-update (el que tiene fondo amarillo) :-)

Necesitarás redirigir todo tu tráfico de HTTP a HTTPS. Una regla de reescritura puede hacer esto por ti. Utiliza este código en lugar de la regla de reescritura original de WordPress (si no estás usando caché) en tu archivo .htaccess
:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
# BEGIN WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
También hay plugins que pueden hacer esto por ti, como Easy HTTPS Redirection.

¡Esta es una muy buena manera de proceder sin meter las manos en la base de datos!

@Jack Johansson Redirijo el sitio web de esta manera pero también hay contenido mixto. Por alguna razón, las rutas de las imágenes deben estar hard-codeadas en algún lugar (no puedo encontrar dónde está ese "algún lugar") :-)

@3000 ¿Las imágenes están bajo el mismo dominio que el tuyo? Incluso si están hard-codeadas, la regla de reescritura debe redirigirlas. ¿Estás usando algún tipo de CDN?

@JackJohansson He notado que tengo tres tipos de problemas: imágenes (bajo el mismo dominio), fuentes (CDN) y un widget de Flickr que ya no funciona (también servido desde una dirección http externa)

Utilicé Better Search Replace y Really Simple SSL y el ganador es:
Solo haz esto:
- Instálalo
- Actívalo
- Permite SSL
Listo
También solucionó todos los problemas con la redirección de imágenes

Instala este plugin: https://wordpress.org/plugins/http-https-remover/
A pesar del nombre - HTTP / HTTPS Remover - la última versión forzará todas las conexiones http a https, y tus advertencias de contenido mixto desaparecerán.

El problema con un plugin como este es: debo saber lo que hace "a bajo nivel" (si un plugin rompe mi sitio web, debo crear el sitio web de nuevo)

Acabo de migrar el sitio de mi empresa a la versión solo segura el viernes pasado. Utilicé el Plugin Really Simple SSL y luego agregué una redirección 301 en mi archivo .htaccess.
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
No olvides verificar también la versión HTTPS de tu sitio en Search Console / Herramientas para webmasters

He añadido el código a mi archivo .htaccess que redirigiría cualquier cosa http a https.

De todos modos, este código no está funcionando para mí: imágenes, etc. todavía se sirven con http:// y no https://. Supongo - corrígeme si estoy equivocado/a - que es un problema de caché

Podría estar completamente equivocado, pero no creo que una imagen se almacene en caché y cargue a través de https desde una versión no segura. ¿Estás enlazando con la URL completa, como http://example.com/image.png en el texto mismo?
