Există o modalitate de a forța SSL pe anumite pagini
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?

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 înwp-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;
}

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:
- Activați opțiunea Administration Over SSL în fișierul wp-config.php (vezi aici).
- Instalați plugin-ul WPSSL pe site. (actualizat pentru WordPress 3.0+)
- 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.

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

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

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();
}
}
}

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.

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

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