web-dev-qa-db-fra.com

Est-il possible de forcer SSL sur certaines pages

Je veux forcer une connexion sécurisée sur certaines de mes pages (celles avec des formulaires), mais je ne veux pas que tout le site fonctionne avec ssl (le ralentit)

Existe-t-il un moyen de configurer des pages spécifiques pour qu'elles requièrent SSL?

6
Sruly

Utilisez le plugin admin-ssl. Pour les choses en dehors de wp, utilisez la règle rewriite dans Apache

3
Ramprasad Prabhakar

Nouveau flux de travail, car le plugin Admin SSL n'est pas pris en charge.

  • utiliser le plugin WP https

  • Voir les réglages

  • Si vous voulez SSL pour wp-admin, ajoutez ceci au wp-config.php:

    define( 'FORCE_SSL_ADMIN', TRUE );
    
  • Si vous voulez également SSL pour la page de connexion, ajoutez ceci au wp-config.php

    define( 'FORCE_SSL_LOGIN', TRUE );
    
  • Ajoutez la ligne suivante au .htaccess; supprimer le défaut de WP

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]
    </IfModule>
    
  • Si vous définissez une page/publication spécifique sur SSL en mode frontal, utilisez le plug-in suivant ou définissez l'option dans l'éditeur de la publication/de la page; seulement si vous avez activé cette possibilité du plugin WP https. voir aussi Gist 4081291 pour un exemple de plugin

    /**
     * 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
    
  • Sans 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();
                }
            }
    }
    

ou une version plus petite, mais pas avec des solutions de rechange, si l'URL est fausse

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

Pour WordPress version 3.0 et ultérieure, le plug-in admin-ssl ne fonctionne pas. Pour que SSL fonctionne, vous devez suivre deux étapes:

  1. Activez l'option Administration sur SSL dans votre fichier wp-config.php ( voir ici ).
  2. Installez le plugin WPSSL sur le site. (mis à jour pour WordPress 3.0+)
  3. Sur les pages que vous souhaitez exécuter via SSL, ajoutez une balise méta appelée "force_ssl" et définissez la valeur sur "true".

Vous devriez être tous ensemble après cela.

4
Dillie-O

J'ai eu plusieurs problèmes avec vos solutions (mais cela m'a aidé). Je vais mettre mes solutions ici pour le cas suivant:

  • Wordpress multisite
  • Serveur sur vestacp fonctionnant sur Apache avec un proxy nginx

.J’ai d’abord utilisé cette extension WP: "Fixateur de contenu SSL non sécurisé" qui peut gérer WPMU et l’erreur "Contenu mixte" (Depuis "Wordpress Https" est obsolète et ne fonctionne pas pour moi)

Ensuite, la fonction is_ssl () ne fonctionnait pas avec le proxy nginx, alors j’ai utilisé celui-ci:

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

.Also "is_page ()" ne fonctionnait pas, donc c'est mon code final (pour rediriger les pages spécifiques "vers 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

Essayez le Mieux WP Security Plugin. Outre quelques astuces utiles pour sécuriser votre site, certains paramètres vous permettent de forcer SSL à la page de connexion, ou à l'intégralité du back-end si vous le souhaitez, et aux pages sélectionnées au recto par contenu via une sélection. case ajoutée à l'éditeur visuel. Très facile à utiliser.

Bien sûr, vous devez d'abord configurer SSL sur votre serveur, ce qui signifie que vous devez soit installer un certificat auto-signé (non recommandé), soit payer un certificat émanant d'une autorité tierce et l'installer sur votre serveur.

1
Camajan

Ci-dessous, la meilleure façon de faire "WordPress", je l’ai entièrement commentée pour que vous expliquiez ce que cela fait.

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.
    }
}

Version non commentée pour la propreté :) (même code exact)

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

Les deux plugins mentionnés ci-dessus semblent être obsolètes ou du moins n'ont pas été maintenus depuis un moment. Le plugin WordPress-https semble être la meilleure option et forcera SSL sur tout le site ou seulement sur certaines pages.

0
Drai