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?
Utilisez le plugin admin-ssl. Pour les choses en dehors de wp, utilisez la règle rewriite dans Apache
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;
}
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:
Vous devriez être tous ensemble après cela.
J'ai eu plusieurs problèmes avec vos solutions (mais cela m'a aidé). Je vais mettre mes solutions ici pour le cas suivant:
.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();
}
}
}
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.
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;
}
}
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.