it-swarm-eu.dev

Existuje způsob, jak vynutit ssl na určitých stránkách

Chci přinutit zabezpečené připojení na některé z mých stránek (s formami), ale nechci, aby celý web fungoval se ssl (zpomaluje)

Existuje způsob, jak konfigurovat konkrétní stránky, které vyžadují ssl?

6
Sruly

Použijte plugin admin-ssl. Pro věci mimo wp, použijte rewriite pravidlo v Apache

3

Nový pracovní postup, protože zásuvný modul Admin SSL není podporován.

  • použijte zásuvný modul WP https

  • Viz nastavení

  • Chcete-li pro protokol wp-admin použít protokol SSL, přidejte jej do souboru wp-config.php:

    define( 'FORCE_SSL_ADMIN', TRUE );
    
  • Chcete-li pro stránku přihlášení také protokol SSL, přidejte tento soubor do souboru wp-config.php

    define( 'FORCE_SSL_LOGIN', TRUE );
    
  • Přidejte následující řádek do .htaccess; odstranit výchozí nastavení WP

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]
    </IfModule>
    
  • Pokud nastavíte konkrétní stránku/příspěvek na SSL v front-end, pak použijte následující plugin nebo nastavte volbu v editoru příspěvku/stránky; pouze pokud máte aktivní tuto možnost pluginu WP https. viz také Gist 4081291 pro ukázkový plugin

    /**
     * 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
    
  • Bez pluginu 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();
                }
            }
    }
    

nebo menší verze, ale ne s nouzovými, pokud je url špatně

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

Pro verzi WordPress 3.0 a vyšší nefunguje plugin admin-ssl. Abyste mohli SSL pracovat, musíte provést dva kroky:

  1. Zapněte volbu Správa přes SSL ve vašem souboru wp-config.php ( viz zde ).
  2. Nainstalujte WPSSL plugin na webu. (aktualizováno pro WordPress 3.0+)
  3. Na stránkách, které chcete spustit přes SSL, přidejte meta tag s názvem "force_ssl" a nastavte hodnotu na "true".

Měli byste po tom být všichni.

4
Dillie-O

Měl jsem více problémů s vašimi řešeními (ale pomohl mi to). Řešení uvedu v následujícím případě:

  • Wordpress multisite
  • Server na vestacp běží na Apache s nginx proxy

Nejprve jsem použil pouze toto rozšíření WP: "SSL Insecure Content Fixer", který dokáže zpracovat WPMU a chybu "smíšený obsah" (protože "Wordpress Https" je zastaralý a nefunguje pro mě)

.Secondly, is_ssl () funkce nefungovala s nginx proxy, takže jsem použil tento:

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

.Ale "is_page ()" nefunguje, takže je to můj poslední kód (pro přesměrování konkrétních stránek na 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

Zkuste Better WP Zabezpečení Plugin. Spolu se spoustou užitečných vylepšení pro zabezpečení vašich stránek má některá nastavení, která umožňují vynutit ssl na přihlašovací stránce, nebo celé back-end, pokud se rozhodnete, a na vybrané stránky na konci stránky podle obsahu prostřednictvím výběru do vizuálního editoru. Velmi snadné použití.

Nejprve musíte mít na svém serveru nejprve nastavení SSL, což znamená, že budete muset buď nainstalovat certifikát s vlastním podpisem (nedoporučujeme), nebo zaplatit za certifikát od třetí strany a nainstalovat jej na server.

1
Camajan

Níže by bylo nejlepší "WordPress" způsob, jak to udělat, jsem plně komentoval to pro vás vysvětlit, co dělá.

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

Nekomentovaná verze pro přehlednost :) (stejný přesný kód)

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

Oba výše uvedené pluginy se zdají být zastaralé nebo alespoň nebyly udržovány ina. WordPress-https plugin se jeví jako nejlepší volba a vynutí ssl na celém webu nebo jen na určitých stránkách.

0
Drai