Există o modalitate de a forța SSL pe anumite pagini

12 aug. 2010, 01:30:35
Vizualizări: 19K
Voturi: 6

Doresc să forțez o conexiune securizată pe unele dintre paginile mele (cele care conțin formulare), dar nu vreau ca întregul site să funcționeze cu SSL (îl încetinește).

Există o modalitate de a configura anumite pagini să necesite SSL?

0
Toate răspunsurile la întrebare 7
2
11

Flux de lucru nou, deoarece plugin-ul Admin SSL nu este suportat.

  • utilizați Plugin-ul WP https

  • Verificați setările

  • Dacă doriți SSL pentru wp-admin, adăugați aceasta în wp-config.php:

    define( 'FORCE_SSL_ADMIN', TRUE );
    
  • Dacă doriți de asemenea SSL pentru pagina de log in, adăugați aceasta în wp-config.php

    define( 'FORCE_SSL_LOGIN', TRUE );
    
  • Adăugați următoarea linie în .htaccess; eliminați cea implicită din WP

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
    </IfModule>
    
  • Dacă setați o pagină/postare specifică pentru SSL în front-end, atunci utilizați următorul plugin sau setați opțiunea în editorul postării/paginii; doar dacă aveți activată această posibilitate din plugin-ul WP https. vedeți și Gist 4081291 pentru un exemplu de plugin

    /**
     * Plugin Name: Forțează SSL pentru pagini specifice
     * 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 = '' ) {
            // O listă de postări/pagini care ar trebui să fie SSL
            $ssl_posts = array( 22, 312 );
    
            if ( in_array( $id, $ssl_posts ) )
                $force_ssl = TRUE;
    
            return $force_ssl;
        }
    
    } // end if func exists
    
  • Fără 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();
                }
            }
    }
    

sau o versiune mai mică, dar fără fallbacks, dacă URL-ul este greșit

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
Comentarii

Mulțumesc; nu am reușit să formatăm codul :(

bueltge bueltge
16 nov. 2012 12:44:38

Dacă activezi SSL forțat pentru admin, nu ai nevoie de define( 'FORCE_SSL_LOGIN', TRUE );

Chirag Chirag
23 mai 2013 11:56:55
2

Pentru WordPress versiunea 3.0 și mai nouă, plugin-ul admin-ssl nu funcționează. Pentru a activa SSL, trebuie să urmați doi pași:

  1. Activați opțiunea Administration Over SSL în fișierul wp-config.php (vezi aici).
  2. Instalați plugin-ul WPSSL pe site. (actualizat pentru WordPress 3.0+)
  3. Pe paginile pe care doriți să ruleze prin SSL, adăugați un meta tag numit "force_ssl" și setați valoarea la "true".

După acești pași, ar trebui să fie totul configurat corect.

21 oct. 2010 19:11:30
Comentarii

WPSSL nu a fost actualizat de peste 2 ani. Îl folosești în prezent într-o instalare actualizată de WP?

Gaia Gaia
16 nov. 2012 15:31:51

Nu, deoarece nu mai lucrez la acel proiect specific. Poate că e timpul să găsim un plugin mai nou și să-l recomandăm.

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

Utilizează pluginul admin-ssl. Pentru elementele în afara wp, folosește regula de rescriere în Apache

12 aug. 2010 01:42:11
Comentarii

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

artlung artlung
12 aug. 2010 03:40:27

Trebuie menționat că acest plugin nu funcționează cu WordPress 3.0+

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

Chiar dacă nu a fost actualizat recent, plugin-ul WordPress HTTPS funcționează bine cu versiunile mai noi de WP.

julianm julianm
11 apr. 2016 17:00:22
1

Încearcă plugin-ul Better WP Security. Pe lângă o serie de ajustări utile pentru securizarea site-ului tău, acesta are câteva setări care îți permit să forțezi SSL pe pagina de login, sau pe întreaga interfață de administrare dacă alegi, precum și pe anumite pagini din partea publică prin intermediul unei casete de selecție adăugate în editorul vizual. Foarte ușor de utilizat.

Desigur, mai întâi trebuie să ai SSL configurat pe server, ceea ce înseamnă că fie instalezi un certificat auto-semnat (nu este recomandat), fie achiziționezi un certificat de la o autoritate terță și îl instalezi pe server.

21 feb. 2013 09:28:28
Comentarii

Acest lucru nu răspunde la întrebarea: pagini "specifice".

kaiser kaiser
21 feb. 2013 11:37:17
0

Am avut multiple probleme cu soluțiile voastre (dar m-au ajutat). Voi pune soluțiile mele pentru următorul caz:

  • Wordpress multisite
  • Server pe vestacp rulează pe apache cu proxy nginx

.În primul rând, am folosit doar această extensie WP: "SSL Insecure Content Fixer" care poate gestiona WPMU și eroarea "conținut mixt" (Deoarece "Wordpress Https" este depreciat și nu funcționează pentru mine)

.În al doilea rând, funcția is_ssl() nu funcționa cu proxy-ul nginx, așa că am folosit aceasta:

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

.De asemenea, "is_page()" nu funcționa, așa că acesta este codul meu final (pentru redirecționarea paginilor specifice la https)

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

    global $post;

    //login = 8886
    //Pagini clienți
    $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

Ambele plugin-uri menționate mai sus par a fi depășite sau cel puțin nu au fost întreținute de ceva vreme. Plugin-ul WordPress-https pare a fi cea mai bună opțiune și va forța SSL pe întregul site sau doar pe anumite pagini.

6 sept. 2012 22:47:55
Comentarii

acest plugin este foarte instabil pentru mine. sper să găsesc unul mai bun.

cwd cwd
15 sept. 2012 03:12:50

L-am folosit pe un singur site fără probleme, dar nu l-am testat în profunzime. Pur și simplu nu am încredere în pluginurile care nu au fost actualizate de peste un an. De asemenea, acest dezvoltator pare destul de receptiv la întrebări.

Drai Drai
17 sept. 2012 18:48:04
0

Mai jos este cel mai bun mod "WordPress" de a face acest lucru, am comentat complet codul pentru a explica ce face.

add_action('wp','_my_custom_ssl_redirect'); // hook-ul 'wp' este primul loc unde ID-ul postului este setat.
function _my_custom_ssl_redirect(){
    global $post,$wp; // obținem câteva variabile globale.

    $page_ids = array(2,123,321,456); // array cu ID-urile paginilor pe care vrem să le forțăm să folosească SSL.

    if( is_page() && isset($post->ID) && in_array($post->ID,$page_ids) ){ // verificăm dacă suntem pe o pagină și dacă este o pagină pe care vrem să o redirecționăm.

        wp_safe_redirect( // ne asigurăm că redirecționăm doar către URL-uri "interne".
            add_query_arg( // adăugăm orice argumente de query înapoi în URL.
                $_SERVER['QUERY_STRING'], // Argumentele de query curente.
                '',
                trailingslashit( // adăugăm o slash finală la URL-ul de acasă, deoarece uneori nu este adăugată.
                    home_url( $wp->request, "https" ), // obținem URL-ul de acasă cu HTTPS.
                    301 // setăm redirecționarea să fie 301 "permanentă", poți folosi 302 "temporară" aici în schimb.
                )
            )
        );
        exit; // ieșim imediat, nu are rost să încărcăm mai mult.
    }
}

Versiunea necomentată pentru curățenie :) (același cod exact)

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

    $page_ids = array(2,123,321,456); // array cu ID-urile paginilor pe care vrem să le forțăm să folosească 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