Есть ли способ заставить ssl на определенных страницах

Я хочу заставить безопасное соединение на некоторых моих страницах (с формами), но я не хочу, чтобы весь сайт работал с ssl (замедляет его)

Есть ли способ настроить определенные страницы для запроса ssl?

6 голосов | спросил Sruly 12 AM00000020000003531 2010, 02:30:35

7 ответов


3

Используйте плагин admin-ssl. Для вещей вне wp используйте правило rewriite в apache

ответил Ramprasad Prabhakar 12 AM00000020000001131 2010, 02:42:11
11

Новый рабочий процесс, поскольку плагин 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>
    
  • Если вы устанавливаете определенную страницу /сообщение для 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;
}
ответил bueltge 16 52012vEurope/Moscow11bEurope/MoscowFri, 16 Nov 2012 13:29:04 +0400 2012, 13:29:04
4

Для WordPress версии 3.0 и выше плагин admin-ssl не работает. Чтобы заставить SSL работать, вам нужно сделать два шага:

  1. Включите опцию «Администрирование через SSL» в файле wp-config.php ( см. здесь ).
  2. Установите плагин WPSSL на сайте. (обновлено для WordPress 3.0 +)
  3. На страницах, которые вы хотите запустить через SSL, добавьте метатег под названием «force_ssl» и установите значение «true».

После этого вы должны быть настроены.

ответил Dillie-O 21 +04002010-10-21T20:11:30+04:00312010bEurope/MoscowThu, 21 Oct 2010 20:11:30 +0400 2010, 20:11:30
1

Попробуйте Better WP Security плагин. Наряду с кучей полезных настроек для защиты вашего сайта, у него есть некоторые настройки, которые позволяют принудительно заставлять ssl на странице входа в систему или весь задний сервер, если вы выберете, и на выбранные страницы на лицевой стороне каждого контента с помощью выделения поле добавлено в визуальный редактор. Очень проста в использовании.

Конечно, сначала вам нужно настроить SSL на своем сервере, то есть вам нужно либо установить самозаверяющий сертификат (не рекомендуется), либо оплатить сертификат от стороннего источника и установить его на свой сервер.

ответил Camajan 21 FebruaryEurope/MoscowbThu, 21 Feb 2013 11:28:28 +0400000000amThu, 21 Feb 2013 11:28:28 +040013 2013, 11:28:28
1

У меня было несколько проблем с вашими решениями (но это помогло мне). Я поставлю свои решения здесь для следующего случая:

  • Многоязычный Wordpress
  • Сервер на 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();
        }
    }

}
ответил Stéphane Molano 8 FebruaryEurope/MoscowbWed, 08 Feb 2017 18:16:57 +0300000000pmWed, 08 Feb 2017 18:16:57 +030017 2017, 18:16:57
0

Оба упомянутых выше плагина кажутся устаревшими или, по крайней мере, не поддерживаются. плагин WordPress-https , кажется, лучший вариант и заставит ssl на весь сайта или только на определенных страницах.

ответил Drai 6 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 06 Sep 2012 23:47:55 +0400 2012, 23:47:55
0

Ниже будет лучший способ «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;
    }
}
ответил Stiofan O'Connor 18 62017vEurope/Moscow11bEurope/MoscowSat, 18 Nov 2017 18:46:47 +0300 2017, 18:46:47

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132