bobbyjack
  • 0
Эксперт

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

  • 0

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

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

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

    • 0
  2. Новый рабочий процесс, так как подключаемый модуль 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;
    }
    
    • 0
  3. Для WordPress версии 3.0 и выше плагин admin-ssl не работает. Чтобы заставить SSL работать, вам нужно сделать два шага:

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

    Вы должны быть готовы после этого.

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

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

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

    • Мультисайт WordPress
    • Сервер на vestacp работает на апаче с прокси 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();
            }
        }
    
    }
    
    • 0
  6. Оба плагина, упомянутые выше, кажутся устаревшими или, по крайней мере, некоторое время не поддерживались. Плагин WordPress-https кажется лучшим вариантом и будет принудительно использовать ssl на всем сайте или только на определенных страницах.

    • 0
  7. Ниже будет лучший способ «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

Оставить ответ

You must login to add an answer.