¿Cómo usar bloginfo() y get_template_directory_uri() con SSL?

17 ene 2013, 01:48:27
Vistas: 16.7K
Votos: 4

Tengo un tema de WordPress que estoy intentando implementar en un sitio web que solo usa SSL. No existe una versión sin SSL del sitio.

El tema de WordPress utiliza varias funciones como bloginfo('pingback_url'), bloginfo('template_directory'), get_template_directory_uri(), etc... Todas las funciones típicas de un tema.

Todas estas funciones generan enlaces http, no https, por lo tanto ninguno de ellos carga, ya que no existe una versión sin SSL del sitio.

¿Cómo puedo forzar a WordPress a usar https para TODO?

2
Comentarios

¿Enlace? Esas funciones deberían devolver URLs HTTPS si tienes configurada la dirección de tu sitio como HTTPS. ¿Cómo le indicas a tu sitio que use SSL?

webaware webaware
17 ene 2013 01:58:20

También ten en cuenta: se está reportando un problema similar aquí, actualizaré con una respuesta si la obtengo.

webaware webaware
31 ene 2013 07:23:17
Todas las respuestas a la pregunta 2
0

Prueba instalando este plugin de WordPress. http://wordpress.org/extend/plugins/wordpress-https/installation/ pero asegúrate de leer las instrucciones de instalación ya que requiere algunos pasos adicionales después de activar el plugin.

17 ene 2013 17:28:20
2

Si tu sitio web está en un servicio de balanceo de carga que maneja SSL, es posible que tu servidor no reciba nada en la variable del servidor $_SERVER['HTTPS'], y $_SERVER['SERVER_PORT'] podría ser 80 cuando debería ser 443 (consulta esta respuesta en Stack Overflow para más detalles).

Si este es el caso y no puedes hacer que tu host lo cambie, entonces podrías necesitar ajustarlo y decirle a PHP que está en SSL de todas formas. Configura tus URLs de inicio y del sitio para que usen https, de modo que todas las URLs generadas por WordPress salgan como URLs https. Luego, inserta este código en un plugin (aquí hay uno listo para usar, colócalo en tu carpeta de plugins y actívalo):

// si el sitio está configurado para ejecutarse en SSL, ¡fuerza la detección de SSL!
if (stripos(get_option('siteurl'), 'https://') === 0) {
    $_SERVER['HTTPS'] = 'on';
}

Nota: Esto puede tener un efecto contrario, ya que probablemente tengas código (en plugins o en tu propio código) que verifica si la página se cargó a través de SSL y redirige si no fue así. ¡Tu servidor no podrá probar esto ahora! Por lo tanto, también deberías agregar algún JavaScript a tu página para que haya un nivel de seguridad de que tus páginas seguras se cargarán a través de SSL (esto también lo hace el plugin listo para usar):

<script>
if (document.location.protocol != "https:") {
    document.location = document.URL.replace(/^http:/i, "https:");
}
</script>

Nota: ¡Esto no es infalible! Sin embargo, debería captar la mayoría de las situaciones, excepto alguien que deshabilite JavaScript y luego edite la URL para forzarla de vuelta a http. Si hacen eso, quizás merezcan que sus credenciales de tarjeta de crédito sean vendidas a Elbonia.

1 feb 2013 05:20:48
Comentarios

Solo quería añadir a esto. Tenía un problema similar donde la URL aparecía como HTTPS, pero WordPress mostraba las URLs de scripts y estilos con HTTP y no HTTPS (lo que hace que no se carguen porque los navegadores no permiten que los sitios web mezclen HTTP y HTTPS). La razón de este problema era que estaba usando el SSL Flexible de CloudFlare y la conexión entre el usuario y CloudFlare es segura pero la conexión entre CloudFlare y el servidor web no es segura (por lo que WordPress piensa que HTTPS está desactivado). Configurar $_SERVER['HTTPS'] como on soluciona este problema.

SameOldNick SameOldNick
3 feb 2015 02:34:06

Como nota adicional, he instalado la herramienta de línea de comandos de wp desde http://www.electrictoolbox.com/wordpress-enable-disable-plugins-command-line/ para activar el plugin.

BTR Naidu BTR Naidu
20 abr 2016 23:37:54