È possibile forzare SSL su determinate pagine

12 ago 2010, 01:30:35
Visualizzazioni: 19K
Voti: 6

Voglio forzare una connessione sicura su alcune delle mie pagine (quelle con moduli), ma non voglio che l'intero sito funzioni con SSL (rallenterebbe)

È possibile configurare pagine specifiche per richiedere SSL?

0
Tutte le risposte alla domanda 7
2
11

Nuovo flusso di lavoro, dato che il plugin Admin SSL non è più supportato.

  • Utilizza il plugin WP HTTPS

  • Consulta le impostazioni

  • Se vuoi SSL per wp-admin, aggiungi questo al file wp-config.php:

    define( 'FORCE_SSL_ADMIN', TRUE );
    
  • Se vuoi SSL anche per la pagina di login, aggiungi questo al file wp-config.php

    define( 'FORCE_SSL_LOGIN', TRUE );
    
  • Aggiungi la seguente riga al file .htaccess; rimuovi quella predefinita di WP

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    </IfModule>
    
  • Se vuoi impostare una pagina/post specifica con SSL in front-end, utilizza il seguente plugin o imposta l'opzione nell'editor del post/pagina; solo se hai attivato questa possibilità nel plugin WP HTTPS. Vedi anche Gist 4081291 per un plugin di esempio

    /**
     * Plugin Name: Forza SSL per pagine specifiche
     * 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 = '' ) {
            // Lista di post/pagine che devono essere in SSL
            $ssl_posts = array( 22, 312 );
    
            if ( in_array( $id, $ssl_posts ) )
                $force_ssl = TRUE;
    
            return $force_ssl;
        }
    
    } // end if func exists
    
  • Senza il 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();
                }
            }
    }
    

oppure una versione più compatta, ma senza fallback in caso di URL errati

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
Commenti

Grazie; non mi è stato possibile formattare il codice :(

bueltge bueltge
16 nov 2012 12:44:38

Se stai forzando SSL per l'admin, non hai bisogno di define( 'FORCE_SSL_LOGIN', TRUE );

Chirag Chirag
23 mag 2013 11:56:55
2

Per WordPress versione 3.0 e superiori, il plugin admin-ssl non funziona. Per far funzionare SSL, è necessario seguire due passaggi:

  1. Abilita l'opzione Administration Over SSL nel tuo file wp-config.php (vedi qui).
  2. Installa il plugin WPSSL sul sito. (aggiornato per WordPress 3.0+)
  3. Sulle pagine che vuoi far funzionare tramite SSL, aggiungi un meta tag chiamato "force_ssl" e imposta il valore su "true".

Dovresti essere a posto dopo questi passaggi.

21 ott 2010 19:11:30
Commenti

WPSSL non viene aggiornato da oltre 2 anni. Lo stai attualmente utilizzando con un'installazione aggiornata di WP?

Gaia Gaia
16 nov 2012 15:31:51

No, dato che non lavoro più a quel particolare progetto. Potrebbe essere il momento di trovare un plugin più recente e consigliarlo.

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

Utilizza il plugin admin-ssl. Per elementi al di fuori di WordPress, usa la regola di riscrittura in Apache

12 ago 2010 01:42:11
Commenti

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

artlung artlung
12 ago 2010 03:40:27

Va notato che questo plugin non funziona con WordPress 3.0+

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

Anche se non è stato aggiornato di recente, il plugin WordPress HTTPS funziona bene con le versioni più recenti di WP.

julianm julianm
11 apr 2016 17:00:22
1

Prova il plugin Better WP Security. Oltre a una serie di utili modifiche per proteggere il tuo sito, include alcune impostazioni che ti permettono di forzare l'SSL sulla pagina di login, o sull'intera area amministrativa se lo desideri, e su pagine specifiche del front-end tramite una casella di selezione aggiunta all'editor visivo. Molto semplice da usare.

Ovviamente, devi prima aver configurato l'SSL sul tuo server, il che significa che devi installare un certificato autofirmato (sconsigliato) o acquistare un certificato da un'autorità di certificazione di terze parti e installarlo sul tuo server.

21 feb 2013 09:28:28
Commenti

Questo non risponde alla domanda: pagine "specifiche".

kaiser kaiser
21 feb 2013 11:37:17
0

Ho avuto diversi problemi con le vostre soluzioni (ma mi hanno aiutato). Metterò qui le mie soluzioni per il seguente caso:

  • Wordpress multisite
  • Server su vestacp in esecuzione su apache con proxy nginx

.Inizialmente ho usato solo questa estensione WP: "SSL Insecure Content Fixer" che può gestire WPMU e l'errore "mixed content" (Dato che "Wordpress Https" è deprecato e non funzionava per me)

.In secondo luogo, la funzione is_ssl() non funzionava con il proxy nginx quindi ho usato questa:

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

.Inoltre "is_page()" non funzionava quindi questo è il mio codice finale (per reindirizzare le pagine specifiche a https)

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

    global $post;

    //login = 8886
    //Pagine clienti
    $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

Entrambi i plugin menzionati sopra sembrano essere obsoleti o almeno non sono stati mantenuti per un po' di tempo. Il plugin WordPress-https sembra essere l'opzione migliore e forzerà l'SSL su tutto il sito o solo su determinate pagine.

6 set 2012 22:47:55
Commenti

questo plugin è davvero instabile per me. spero di trovarne uno migliore.

cwd cwd
15 set 2012 03:12:50

L'ho usato su un sito senza problemi, ma non l'ho testato approfonditamente. Semplicemente non mi fido di usare plugin che non vengono aggiornati da oltre un anno. Inoltre questo sviluppatore sembra piuttosto reattivo alle domande.

Drai Drai
17 set 2012 18:48:04
0

Di seguito è riportato il modo migliore in stile "WordPress" per farlo, ho commentato completamente il codice per spiegarti cosa fa.

add_action('wp','_my_custom_ssl_redirect'); // l'hook 'wp' è il primo punto in cui l'ID del post è impostato.
function _my_custom_ssl_redirect(){
    global $post,$wp; // ottieni alcuni valori globali.

    $page_ids = array(2,123,321,456); // array di ID di pagine che vogliamo forzare in SSL.

    if( is_page() && isset($post->ID) && in_array($post->ID,$page_ids) ){ // verifica che siamo su una pagina e che sia una pagina che vogliamo reindirizzare.

        wp_safe_redirect( // assicurati di reindirizzare solo a URL "interni".
            add_query_arg( // aggiungi eventuali argomenti di query URL all'URL.
                $_SERVER['QUERY_STRING'], // Gli argomenti di query correnti.
                '',
                trailingslashit( // aggiungi uno slash finale all'URL home poiché a volte non è aggiunto.
                    home_url( $wp->request, "https" ), // ottieni il link HTTPS dell'URL home.
                    301 // imposta il reindirizzamento come 301 "permanente", puoi usare 302 "temporaneo" qui invece.
                )
            )
        );
        exit; // esci il prima possibile, non ha senso caricare altro.
    }
}

Versione non commentata per pulizia :) (stesso identico codice)

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

    $page_ids = array(2,123,321,456); // array di ID di pagine che vogliamo forzare in 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