it-swarm-es.com

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

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

¿Hay una manera de configurar páginas específicas para requerir ssl?

6
Sruly

Utilice el plugin admin-ssl. Para cosas fuera de wp, use la regla rewriite en Apache

3

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

  • use el complemento WP https

  • Ver las configuraciones

  • Si desea SSL para wp-admin, agregue esto al wp-config.php:

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

    define( 'FORCE_SSL_LOGIN', TRUE );
    
  • Agregue la línea de seguimiento al .htaccess; eliminar el valor predeterminado de WP

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]
    </IfModule>
    
  • Si configura una página/publicación específica a SSL en el front-end, entonces use el siguiente complemento o configure la opción en el editor de la publicación/página; solo si tiene activada esta posibilidad del complemento WP https. vea también Gist 4081291 para un complemento de muestra

    /**
     * Plugin Name: Force SSL for specific pages
     * 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 = '' ) {
            // A list of posts/page that should be SSL
            $ssl_posts = array( 22, 312 );
    
            if ( in_array( $id, $ssl_posts ) )
                $force_ssl = TRUE;
    
            return $force_ssl;
        }
    
    } // end if func exists
    
  • Sin 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 no con fallbacks, 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;
}
11
bueltge

Para WordPress versión 3.0 y superior, el complemento admin-ssl no funciona. Para que SSL funcione, debe realizar dos pasos:

  1. Habilite la opción Administración sobre SSL en su archivo wp-config.php ( vea aquí ).
  2. Instale el complemento WPSSL en el sitio. (actualizado para WordPress 3.0+)
  3. En las páginas que desea ejecutar sobre SSL, agregue una meta etiqueta llamada "force_ssl" y establezca el valor en "verdadero".

Deberías estar todo listo después de eso.

4
Dillie-O

Tuve múltiples problemas con tus soluciones (pero me ayudaron). Pondré mis soluciones aquí para el siguiente caso:

  • WordPress multisitio
  • Servidor en vestacp ejecutándose en Apache con el proxy nginx

Primero, solo usé esta WP extensión: "SSL Insegure Content Fixer" que puede manejar WPMU, y el error "contenido mixto" (ya que "Wordpress Https" está obsoleto y no funciona para mí)

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

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

También "is_page ()" no estaba funcionando, así que este es mi código final (para redireccionar las páginas específicas "a https)

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

    global $post;

    //login = 8886
    //Pages clients
    $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();
        }
    }

}
1
Stéphane Molano

Pruebe el Mejor WP Seguridad Plugin. Junto con un montón de ajustes útiles para asegurar su sitio, tiene algunas configuraciones que le permiten forzar el ssl a la página de inicio de sesión, o al back-end completo si lo desea, y a las páginas seleccionadas en el extremo delantero por contenido a través de una selección Cuadro agregado al editor visual. Muy fácil de usar.

Por supuesto, primero debe configurar SSL en su servidor, lo que significa que debe instalar un certificado autofirmado (no recomendado) o pagar por un certificado de una autoridad de terceros e instalarlo en su servidor.

1
Camajan

A continuación se muestra la mejor forma de "WordPress" para hacerlo, lo he comentado completamente para que explique qué está haciendo.

add_action('wp','_my_custom_ssl_redirect'); // the 'wp' hook is the first place the post id is set.
function _my_custom_ssl_redirect(){
    global $post,$wp; // get some global values.

    $page_ids = array(2,123,321,456); // array of page ids we want to force to ssl.

    if( is_page() && isset($post->ID) && in_array($post->ID,$page_ids) ){ // check we are on a page and its a page we want to redirect.

        wp_safe_redirect( // make sure we only redirect to "internal" urls.
            add_query_arg( // add any url query arguments back to the url.
                $_SERVER['QUERY_STRING'], // The current query args.
                '',
                trailingslashit( // add a trailing slash to the home url as sometimes it is not added.
                    home_url( $wp->request, "https" ), // get the home url HTTPS link.
                    301 // set the redirect to be 301 "permanent", you can use 302 "temporary" here instead.
                )
            )
        );
        exit; // exit ASAP, no point in loading anything more.
    }
}

Versión no comentada para pulcritud :) (mismo código exacto)

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

    $page_ids = array(2,123,321,456); // array of page ids we want to force to 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;
    }
}
0
Stiofan O'Connor

Los dos complementos mencionados anteriormente parecen estar desactualizados o, al menos, no se han mantenido durante un tiempo. El WordPress-https plugin parece ser la mejor opción y forzará el ssl en todo el sitio o solo en ciertas páginas.

0
Drai