it-swarm-vi.tech

Có cách nào để buộc ssl trên một số trang nhất định không

Tôi muốn buộc kết nối an toàn trên một số trang của mình (những trang có biểu mẫu), nhưng tôi không muốn toàn bộ trang web hoạt động với ssl (làm chậm nó)

Có cách nào để cấu hình các trang cụ thể để yêu cầu ssl không?

6
Sruly

Sử dụng plugin admin-ssl. Đối với những thứ bên ngoài wp, hãy sử dụng quy tắc tua lại trong Apache

3
Ramprasad Prabhakar

Quy trình làm việc mới, vì plugin Admin SSL không được hỗ trợ.

  • sử dụng Plugin WP https

  • Xem các cài đặt

  • Nếu bạn muốn SSL cho wp-admin, hãy thêm cái này vào wp-config.php:

    define( 'FORCE_SSL_ADMIN', TRUE );
    
  • Nếu bạn cũng muốn SSL cho trang đăng nhập, hãy thêm nó vào wp-config.php

    define( 'FORCE_SSL_LOGIN', TRUE );
    
  • Thêm dòng theo dõi vào .htaccess; xóa mặc định của WP

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]
    </IfModule>
    
  • Nếu bạn đặt một trang/bài đăng cụ thể thành SSL ở mặt trước, thì hãy sử dụng plugin sau hoặc đặt tùy chọn trong trình chỉnh sửa của bài đăng/trang; chỉ khi bạn đã kích hoạt khả năng này của plugin WP https. xem thêm Gist 4081291 để biết plugin mẫu

    /**
     * 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
    
  • Không có Plugin HTTPS WordPress

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

hoặc một phiên bản nhỏ hơn, nhưng không có dự phòng, nếu url sai

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

Đối với WordPress phiên bản 3.0 trở lên, plugin admin-ssl không hoạt động. Để SSL hoạt động, bạn cần thực hiện hai bước:

  1. Kích hoạt tùy chọn Quản trị qua SSL trong tệp wp-config.php của bạn ( xem tại đây ).
  2. Cài đặt plugin WPSSL trên trang web. (được cập nhật cho WordPress 3.0+)
  3. Trên các trang bạn muốn chạy qua SSL, hãy thêm thẻ meta có tên "force_ssl" và đặt giá trị thành "true".

Bạn nên được thiết lập sau đó.

4
Dillie-O

Tôi đã có nhiều vấn đề với các giải pháp của bạn (nhưng nó đã giúp tôi). Tôi sẽ đặt giải pháp của mình ở đây cho trường hợp sau:

  • Đa ngôn ngữ
  • Máy chủ trên vestacp chạy trên Apache với nginx proxy

. Trước tiên tôi chỉ sử dụng tiện ích mở rộng WP này: "Trình sửa lỗi nội dung không bảo mật SSL", người có thể xử lý WPMU và lỗi "nội dung hỗn hợp" (Vì "Wordpress Https" không được dùng cho tôi)

.Thứ hai, hàm is_ssl () không hoạt động với proxy nginx nên tôi đã sử dụng hàm này:

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

.Also "is_page ()" không hoạt động nên đây là mã cuối cùng của tôi (để chuyển hướng các trang cụ thể "sang 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
Stéphane Molano

Hãy thử Tốt hơn WP Bảo mật Plugin. Cùng với một loạt các chỉnh sửa hữu ích để bảo mật trang web của bạn, nó có một số cài đặt cho phép bạn buộc ssl vào trang đăng nhập hoặc toàn bộ back-end nếu bạn chọn và đến các trang được chọn ở mặt trước cho mỗi nội dung thông qua lựa chọn hộp được thêm vào trình soạn thảo trực quan. Rất dễ sử dụng.

Tất nhiên, trước tiên bạn phải thiết lập SSL trên máy chủ của mình, nghĩa là bạn phải cài đặt chứng chỉ tự ký (không được khuyến nghị) hoặc trả tiền cho chứng chỉ từ cơ quan bên thứ 3 và cài đặt nó trên máy chủ của bạn.

1
Camajan

Dưới đây sẽ là cách "WordPress" tốt nhất để làm điều đó, tôi đã nhận xét đầy đủ cho bạn để giải thích những gì nó đang làm.

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

Phiên bản không bình luận cho sự gọn gàng :) (cùng mã chính xác)

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

Cả hai plugin được đề cập ở trên dường như đã lỗi thời hoặc ít nhất là không được duy trì trong khi đó. Plugin WordPress-https dường như là tùy chọn tốt nhất và sẽ buộc ssl trên toàn bộ trang web hoặc chỉ trên một số trang nhất định.

0
Drai