it-swarm-id.com

Apakah ada cara untuk memaksa ssl pada halaman tertentu

Saya ingin memaksakan koneksi yang aman di beberapa halaman saya (yang memiliki formulir), tetapi saya tidak ingin seluruh situs bekerja dengan ssl (memperlambatnya)

Apakah ada cara untuk mengkonfigurasi halaman tertentu yang membutuhkan ssl?

6
Sruly

Gunakan plugin admin-ssl. Untuk hal-hal di luar wp, gunakan aturan penulisan ulang di Apache

3

Alur kerja baru, karena plugin Admin SSL tidak didukung.

  • gunakan Plugin WP https

  • Lihat pengaturannya

  • Jika Anda ingin SSL untuk wp-admin, tambahkan ini ke wp-config.php:

    define( 'FORCE_SSL_ADMIN', TRUE );
    
  • Jika Anda ingin juga SSL untuk halaman login, tambahkan ini ke wp-config.php

    define( 'FORCE_SSL_LOGIN', TRUE );
    
  • Tambahkan baris ikuti ke .htaccess; hapus default WP

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]
    </IfModule>
    
  • Jika Anda mengatur halaman/posting tertentu ke SSL di front-end, kemudian gunakan plugin berikut atau atur opsi di editor posting/halaman; hanya jika Anda telah mengaktifkan kemungkinan plugin ini WP https. lihat juga Gist 4081291 untuk contoh 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
    
  • Tanpa 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();
                }
            }
    }
    

atau versi yang lebih kecil, tetapi tidak dengan fallback, jika urlnya salah

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

Untuk WordPress versi 3.0 dan di atasnya, plugin admin-ssl tidak berfungsi. Agar SSL berfungsi, Anda perlu mengambil dua langkah:

  1. Aktifkan opsi Administrasi Atas SSL di file wp-config.php Anda ( lihat di sini ).
  2. Instal WPSSL plugin di situs. (diperbarui untuk WordPress 3.0+)
  3. Pada halaman yang ingin Anda jalankan di atas SSL, tambahkan tag meta yang disebut "force_ssl" dan atur nilainya menjadi "true".

Anda harus siap setelah itu.

4
Dillie-O

Saya punya banyak masalah dengan solusi Anda (tetapi itu membantu saya). Saya akan meletakkan solusi saya di sini untuk kasus berikut:

  • Wordpress multisite
  • Server pada vestacp berjalan di Apache dengan proxy nginx

.Pertama saya hanya menggunakan ekstensi WP ini: "SSL Insecure Content Fixer" yang dapat menangani WPMU, dan kesalahan "konten campuran" (Karena "Wordpress Https" sudah usang dan tidak berfungsi untuk saya)

.Secondely, fungsi is_ssl () tidak berfungsi dengan proxy nginx jadi saya menggunakan yang ini:

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

.Juga "is_page ()" tidak berfungsi jadi ini adalah kode terakhir saya (untuk mengarahkan ulang halaman tertentu "ke 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

Coba Lebih baik WP Keamanan Plugin. Seiring dengan sekelompok penyesuaian yang membantu untuk mengamankan situs Anda, ia memiliki beberapa pengaturan yang memungkinkan Anda untuk memaksa ssl ke halaman login, atau seluruh back-end jika Anda memilih, dan ke halaman yang dipilih di ujung depan per konten melalui pilihan kotak ditambahkan ke editor visual. Sangat mudah digunakan.

Tentu saja, Anda harus memiliki pengaturan SSL di server Anda terlebih dahulu, artinya Anda harus menginstal sertifikat yang ditandatangani sendiri (tidak disarankan) atau membayar sertifikat dari otoritas pihak ke-3 dan menginstalnya di server Anda.

1
Camajan

Di bawah ini akan menjadi cara "WordPress" terbaik untuk melakukannya, saya telah berkomentar sepenuhnya untuk Anda menjelaskan apa yang dilakukannya.

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

Versi tidak dikomentari untuk kerapian :) (kode persis sama)

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

Kedua plugin yang disebutkan di atas tampaknya sudah usang atau setidaknya belum dipertahankan selama beberapa saat. Plugin WordPress-https tampaknya menjadi opsi terbaik dan akan memaksa ssl di seluruh situs atau hanya di halaman tertentu.

0
Drai