it-swarm-ko.tech

특정 페이지에 SSL을 적용하는 방법이 있습니까?

일부 양식 (양식이있는 페이지)에서 보안 연결을 강제로 수행하려고하지만 전체 사이트가 SSL로 작업하는 것을 원하지 않습니다 (속도가 느려집니다)

Ssl이 필요한 특정 페이지를 구성하는 방법이 있습니까?

6
Sruly

Admin-ssl 플러그인을 사용하십시오. wp 외부의 것들은 Apache에서 rewriite 규칙을 사용하십시오.

3

Admin SSL 플러그인이 지원되지 않으므로 새 워크 플로입니다.

  • 플러그인을 사용하십시오. { WP https

  • 설정보기

  • wp-admin에 SSL을 원하면 wp-config.php에 다음을 추가하십시오.

    define( 'FORCE_SSL_ADMIN', TRUE );
    
  • 로그인 페이지에도 SSL을 원하면 wp-config.php에 추가하십시오

    define( 'FORCE_SSL_LOGIN', TRUE );
    
  • 다음 행을 .htaccess에 추가하십시오. 기본 WP 제거

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]
    </IfModule>
    
  • 특정 페이지/게시물을 프런트 엔드에서 SSL로 설정 한 경우 다음 플러그인을 사용하거나 게시물/페이지의 편집기에서 옵션을 설정하십시오. 이 플러그인을 사용할 가능성이있는 경우에만 WP https합니다. 샘플 플러그인의 경우 Gist 4081291 도 참조하십시오.

    /**
     * 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
    
  • 플러그인을 사용하지 않고 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();
                }
            }
    }
    

또는 더 작은 버전이지만, URL이 틀린 경우에는 대체물이 아닙니다.

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

WordPress 버전 3.0 이상에서는 admin-ssl 플러그인이 작동하지 않습니다. SSL을 작동 시키려면 두 단계를 수행해야합니다.

  1. Wp-config.php 파일에서 SSL을 통한 관리 옵션을 활성화하십시오 ( 여기 참조).
  2. 사이트에 WPSSL plugin을 설치하십시오. (WordPress 3.0 이상으로 업데이트)
  3. SSL을 통해 실행하려는 페이지에서 "force_ssl"이라는 메타 태그를 추가하고 값을 "true"로 설정하십시오.

그 후에 모든 것을 설정해야합니다.

4
Dillie-O

귀하의 솔루션에 여러 가지 문제가 있었지만 도움이되었습니다. 다음과 같은 경우에 솔루션을 여기에 넣겠습니다.

  • 워드 프레스 멀티 사이트
  • Nginx 프록시를 사용하여 Apache에서 실행되는 vestacp의 서버

. 먼저이 WP 확장명 만 사용했습니다. WPMU를 처리 할 수있는 "SSL 안전하지 않은 컨텐츠 수정 자"및 "혼합 컨텐츠"오류 ( "Wordpress Https"는 더 이상 사용되지 않으며 작동하지 않습니다)

. 둘째, is_ssl () 함수는 nginx 프록시와 함께 작동하지 않으므로이 것을 사용했습니다.

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

. 또한 "is_page ()"가 작동하지 않았으므로 이것이 최종 코드입니다 (특정 페이지를 리디렉션하기위한) 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

Better WP Security Plugin을 사용해보십시오. 사이트를 보호하기위한 유용한 조정과 함께 ssl을 로그인 페이지 또는 선택한 경우 전체 백엔드로 강제 설정할 수있는 몇 가지 설정과 선택 항목을 통해 콘텐츠별로 프런트 엔드의 선택된 페이지를 제공합니다 상자가 비주얼 편집기에 추가되었습니다. 매우 사용하기 쉽습니다.

물론 서버에서 SSL 설정을해야합니다. 즉, 자체 서명 인증서 (권장하지 않음)를 설치하거나 제 3 기관의 인증서를 지불하고 서버에 설치해야합니다.

1
Camajan

아래는 최선의 "WordPress"방법 일 것입니다. 나는 당신이 그 일을 어떻게 설명하는지 완전히 주석을 달았습니다.

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

깔끔함을위한 주석이없는 버전 :) (같은 정확한 코드)

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

위에서 언급 한 두 플러그인은 시대에 뒤진 것으로 보이거나 최소한 유지 관리되지 않은 것 같습니다. WordPress - https 플러그인 이 가장 좋은 옵션 인 것처럼 보이며 전체 사이트 또는 특정 페이지에서만 SSL을 적용합니다.

0
Drai