it-swarm.asia

هل هناك طريقة لفرض SSL على صفحات معينة

أريد فرض اتصال آمن على بعض صفحاتي (الصفحات ذات النماذج) ، لكن لا أريد أن يعمل الموقع بأكمله باستخدام ssl (يبطئ ذلك)

هل هناك طريقة لتكوين صفحات محددة تتطلب SSL؟

6
Sruly

استخدم البرنامج المساعد admin-ssl. للأشياء خارج wp ، استخدم قاعدة rewriite في Apache

3
Ramprasad Prabhakar

سير عمل جديد ، نظرًا لأن المكون الإضافي Admin SSL غير مدعوم.

  • استخدم المكوّن الإضافي WP https

  • انظر الإعدادات

  • إذا كنت تريد SSL لـ wp-admin ، فأضف ذلك إلى 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>
    
  • إذا قمت بتعيين صفحة/منشور معين على طبقة المقابس الآمنة في الواجهة الأمامية ، فاستخدم المكون الإضافي التالي أو عيّن الخيار في محرر النشر/الصفحة ؛ فقط إذا كان لديك هذا الاحتمال النشط للمكون الإضافي 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
    
  • بدون البرنامج المساعد وورد 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

بالنسبة إلى الإصدار 3.0 من WordPress والإصدارات الأحدث ، لا يعمل البرنامج المساعد admin-ssl. لكي تعمل طبقة مآخذ توصيل آمنة (SSL) ، يلزمك اتخاذ خطوتين:

  1. تمكين خيار الإدارة عبر SSL في ملف wp-config.php ( انظر هنا ).
  2. تثبيت WPSSL البرنامج المساعد على الموقع. (تم التحديث لـ WordPress 3.0+)
  3. في الصفحات التي تريد تشغيلها عبر طبقة المقابس الآمنة ، أضف علامة تعريف تسمى "force_ssl" وقم بتعيين القيمة على "صواب".

يجب أن تكون كل مجموعة بعد ذلك.

4
Dillie-O

واجهت مشاكل متعددة في حلولك (لكنها ساعدتني). سوف أضع حلولي هنا للحالة التالية:

  • وورد متعدد المواقع
  • خادم على vestacp يعمل على Apache مع وكيل nginx

.أولًا استخدم هذا الامتداد WP فقط: "SSL Insecure Content Fixer" الذي يمكنه التعامل مع WPMU ، وخطأ "المحتوى المختلط" (بما أن "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 على الخادم الخاص بك أولاً ، مما يعني أنه يتعين عليك إما تثبيت شهادة موقعة ذاتيًا (غير مستحسن) أو دفع شهادة من جهة خارجية وتثبيتها على الخادم الخاص بك.

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