¿Hay alguna manera de forzar SSL en ciertas páginas?

12 ago 2010, 01:30:35
Vistas: 19K
Votos: 6

Quiero forzar una conexión segura en algunas de mis páginas (las que tienen formularios), pero no quiero que todo el sitio funcione con SSL (lo ralentiza)

¿Existe alguna manera de configurar páginas específicas para que requieran SSL?

0
Todas las respuestas a la pregunta 7
2
11

Nuevo flujo de trabajo, ya que el plugin Admin SSL no es compatible.

  • Utiliza el plugin WP https

  • Revisa los ajustes

  • Si deseas SSL para wp-admin, añade esto al wp-config.php:

    define( 'FORCE_SSL_ADMIN', TRUE );
    
  • Si también quieres SSL para la página de inicio de sesión, añade esto al wp-config.php

    define( 'FORCE_SSL_LOGIN', TRUE );
    
  • Añade la siguiente línea al .htaccess; elimina la configuración por defecto de WP

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    </IfModule>
    
  • Si configuras una página/entrada específica para SSL en el front-end, entonces utiliza el siguiente plugin o establece la opción en el editor de la entrada/página; solo si tienes activa esta posibilidad del plugin WP https. Consulta también Gist 4081291 para un plugin de ejemplo

    /**
     * Plugin Name: Forzar SSL para páginas específicas
     * Description: 
     * Author:      Frank Bültge
     * Author URI:  http://bueltge.de/
     * Version:     1.0.0
     */
    
    ! defined( 'ABSPATH' ) and exit;
    
    if ( ! function_exists( 'fb_force_ssl' ) ) {
    
        add_filter( 'force_ssl' , 'fb_force_ssl', 1, 3 );
        function fb_force_ssl( $force_ssl, $id = 0, $utrl = '' ) {
            // Una lista de entradas/páginas que deben ser SSL
            $ssl_posts = array( 22, 312 );
    
            if ( in_array( $id, $ssl_posts ) )
                $force_ssl = TRUE;
    
            return $force_ssl;
        }
    
    } // end if func exists
    
  • Sin el Plugin WordPress HTTPS

    add_action( 'template_redirect', 'fb_ssl_template_redirect', 1 );
    function fb_ssl_template_redirect() {
    
            if ( is_page( 123 ) && ! is_ssl() ) {
    
                if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
                    wp_redirect(preg_replace('|^http://|', 'https://', $_SERVER['REQUEST_URI']), 301 );
                    exit();
                } else {
                    wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
                    exit();
                }
            } else if ( !is_page( 123 ) && is_ssl() && !is_admin() ) {
    
                if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
                    wp_redirect(preg_replace('|^https://|', 'http://', $_SERVER['REQUEST_URI']), 301 );
                    exit();
                } else {
                    wp_redirect('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
                    exit();
                }
            }
    }
    

o una versión más pequeña, pero sin alternativas si la URL es incorrecta

add_filter( 'pre_post_link', 'fb_set_ssl_url', 10, 3 );
function fb_set_ssl_url( $permalink, $post, $leavename ) {

    if ( 123 == $post->ID )
        return preg_replace( '|^http://|', 'https://', $permalink );

    return $permalink;
}
16 nov 2012 11:29:04
Comentarios

Gracias; no fue posible para mí formatear el código :(

bueltge bueltge
16 nov 2012 12:44:38

Si estás forzando SSL para el administrador, no necesitas define( 'FORCE_SSL_LOGIN', TRUE );

Chirag Chirag
23 may 2013 11:56:55
2

Para la versión 3.0 y superiores de WordPress, el plugin admin-ssl no funciona. Para que SSL funcione, debes seguir dos pasos:

  1. Habilitar la opción de Administración sobre SSL en tu archivo wp-config.php (ver aquí).
  2. Instalar el plugin WPSSL en el sitio. (actualizado para WordPress 3.0+)
  3. En las páginas que deseas que funcionen con SSL, añade una metaetiqueta llamada "force_ssl" y establece su valor en "true".

Después de eso, todo debería estar configurado correctamente.

21 oct 2010 19:11:30
Comentarios

WPSSL no ha sido actualizado en más de 2 años. ¿Actualmente lo estás usando con una instalación actualizada de WP?

Gaia Gaia
16 nov 2012 15:31:51

No lo he hecho, ya que ya no estoy trabajando en ese proyecto en particular. Podría ser el momento de encontrar un plugin más nuevo y recomendarlo.

Dillie-O Dillie-O
16 nov 2012 17:35:20
3

Utiliza el plugin admin-ssl. Para elementos fuera de WordPress, usa reglas de reescritura en Apache

12 ago 2010 01:42:11
Comentarios

URL del plugin Admin SSL: http://wordpress.org/extend/plugins/admin-ssl-secure-admin/

artlung artlung
12 ago 2010 03:40:27

Debe tenerse en cuenta que este plugin no funciona con WordPress 3.0+

Dillie-O Dillie-O
21 oct 2010 19:11:14

Aunque no ha sido actualizado recientemente, el plugin WordPress HTTPS funciona bien con versiones más nuevas de WP.

julianm julianm
11 abr 2016 17:00:22
1

Prueba el plugin Better WP Security. Además de un montón de ajustes útiles para proteger tu sitio, tiene algunas configuraciones que te permiten forzar SSL en la página de inicio de sesión, o en todo el área de administración si lo prefieres, y en páginas seleccionadas del front-end mediante un cuadro de selección añadido al editor visual. Muy fácil de usar.

Por supuesto, primero debes tener SSL configurado en tu servidor, lo que significa que debes instalar un certificado autofirmado (no recomendado) o comprar un certificado de una autoridad de certificación de terceros e instalarlo en tu servidor.

21 feb 2013 09:28:28
Comentarios

Esto no responde a la pregunta: páginas "específicas".

kaiser kaiser
21 feb 2013 11:37:17
0

Tuve múltiples problemas con sus soluciones (pero me ayudaron). Aquí compartiré mis soluciones para el siguiente caso:

  • WordPress multisitio
  • Servidor en vestacp funcionando con Apache y proxy nginx

.Primero solo usé esta extensión de WP: "SSL Insecure Content Fixer" que puede manejar WPMU, y el error de "contenido mixto" (Ya que "WordPress HTTPS" está obsoleto y no funcionó para mí)

.En segundo lugar, la función is_ssl() no funcionaba con el proxy de nginx así que usé esta:

function isSecure() {
  return
    (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
    || $_SERVER['SERVER_PORT'] == 443;
}

.Además "is_page()" no funcionaba así que este es mi código final (para redireccionar páginas específicas a https)

add_action( 'template_redirect', 'fb_ssl_template_redirect', 1 );
function fb_ssl_template_redirect() {

    global $post;

    //login = 8886
    //Páginas de clientes
    $array_posts_ssl = array(8886);
    $array_posts_ssl_parents = array(8886);

    if ( in_array($post->ID,$array_posts_ssl)  ) {

        if ( !isSecure() ) {
            wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
            exit();
        }

    } else  {

        if ( isSecure() ){
            wp_redirect('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] , 301 );
            exit();
        }
    }

}
8 feb 2017 17:16:57
2

Ambos plugins mencionados anteriormente parecen estar desactualizados o al menos no han sido mantenidos por un tiempo. El plugin WordPress-https parece ser la mejor opción y forzará SSL en todo el sitio o solo en ciertas páginas.

6 sept 2012 22:47:55
Comentarios

este plugin es realmente inestable para mí. Espero encontrar uno mejor.

cwd cwd
15 sept 2012 03:12:50

Lo usé en un sitio sin ningún problema, pero no lo he probado extensamente. Simplemente no confío en usar plugins que no se actualizan desde hace más de un año. Además, este desarrollador parece bastante receptivo a las preguntas.

Drai Drai
17 sept 2012 18:48:04
0

A continuación se muestra la mejor manera de hacerlo en "WordPress", he comentado todo para explicarte qué está haciendo.

add_action('wp','_my_custom_ssl_redirect'); // el hook 'wp' es el primer lugar donde se establece el ID de la publicación.
function _my_custom_ssl_redirect(){
    global $post,$wp; // obtener algunos valores globales.

    $page_ids = array(2,123,321,456); // array de IDs de páginas que queremos forzar a SSL.

    if( is_page() && isset($post->ID) && in_array($post->ID,$page_ids) ){ // verificar que estamos en una página y que es una página que queremos redirigir.

        wp_safe_redirect( // asegurarnos de redirigir solo a URLs "internas".
            add_query_arg( // agregar cualquier argumento de consulta de URL de vuelta a la URL.
                $_SERVER['QUERY_STRING'], // Los argumentos de consulta actuales.
                '',
                trailingslashit( // agregar una barra diagonal al final de la URL de inicio, ya que a veces no se agrega.
                    home_url( $wp->request, "https" ), // obtener el enlace HTTPS de la URL de inicio.
                    301 // configurar la redirección como 301 "permanente", puedes usar 302 "temporal" aquí en su lugar.
                )
            )
        );
        exit; // salir lo antes posible, no tiene sentido cargar más cosas.
    }
}

Versión sin comentarios para mayor limpieza :) (exactamente el mismo código)

add_action('wp','_my_custom_ssl_redirect');
function _my_custom_ssl_redirect(){
    global $post,$wp;

    $page_ids = array(2,123,321,456); // array de IDs de páginas que queremos forzar a SSL.

    if( is_page() && isset($post->ID) && in_array($post->ID,$page_ids) ){ 
        wp_safe_redirect( add_query_arg( $_SERVER['QUERY_STRING'], '',trailingslashit(home_url( $wp->request, "https" ), 301 )) );
        exit;
    }
}
18 nov 2017 17:46:47