it-swarm.dev

Gibt es eine Möglichkeit, SSL auf bestimmten Seiten zu erzwingen

Ich möchte auf einigen meiner Seiten (mit Formularen) eine sichere Verbindung erzwingen, aber ich möchte nicht, dass die gesamte Site mit SSL arbeitet (verlangsamt sie).

Gibt es eine Möglichkeit, bestimmte Seiten so zu konfigurieren, dass SSL erforderlich ist?

6
Sruly

Verwenden Sie das admin-ssl-Plugin. Verwenden Sie für Dinge außerhalb von wp die rewriite-Regel in Apache

3

Neuer Workflow, da das Admin-SSL-Plugin nicht unterstützt wird.

  • benutze das Plugin WP https

  • Siehe die Einstellungen

  • Wenn Sie SSL für wp-admin wünschen, fügen Sie dies dem wp-config.php hinzu:

    define( 'FORCE_SSL_ADMIN', TRUE );
    
  • Wenn Sie auch SSL für die Anmeldeseite wünschen, fügen Sie dies dem wp-config.php hinzu.

    define( 'FORCE_SSL_LOGIN', TRUE );
    
  • Fügen Sie die folgende Zeile zum .htaccess hinzu; Entfernen Sie die Standardeinstellung von WP

    <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteCond %{SERVER_PORT} !^443$
       RewriteRule (.*) https://%{HTTP_Host}%{REQUEST_URI} [R,L]
    </IfModule>
    
  • Wenn Sie eine bestimmte Seite/einen bestimmten Beitrag im Front-End auf SSL setzen, verwenden Sie das folgende Plugin oder setzen Sie die Option im Editor des Beitrags/der Seite. Nur wenn Sie diese Möglichkeit des Plugins WP https aktiviert haben. Siehe auch Gist 4081291 für ein Beispiel-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
    
  • Ohne Plugin 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();
                }
            }
    }
    

oder eine kleinere version, aber nicht mit fallbacks, wenn die url falsch ist

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

Für WordPress ab Version 3.0 funktioniert das admin-ssl-Plugin nicht. Damit SSL funktioniert, müssen Sie zwei Schritte ausführen:

  1. Aktivieren Sie die Option Administration Over SSL in Ihrer Datei wp-config.php ( siehe hier ).
  2. Installieren Sie das WPSSL Plugin auf der Site. (aktualisiert für WordPress 3.0+)
  3. Fügen Sie auf den Seiten, die Sie über SSL ausführen möchten, ein Metatag mit dem Namen "force_ssl" hinzu und setzen Sie den Wert auf "true".

Danach sollten Sie fertig sein.

4
Dillie-O

Ich hatte mehrere Probleme mit Ihren Lösungen (aber es hat mir geholfen). Ich werde hier meine Lösungen für den folgenden Fall stellen:

  • Wordpress Multisite
  • Server auf Vestacp läuft auf Apache mit Nginx-Proxy

Zuerst habe ich nur diese WP -Erweiterung verwendet: "SSL Insecure Content Fixer", der mit WPMU umgehen kann, und den Fehler "Mixed Content" (da "Wordpress Https" veraltet ist und bei mir nicht funktioniert)

Zweitens funktionierte die Funktion is_ssl () nicht mit dem Nginx-Proxy, daher habe ich diese verwendet:

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

.Auch "is_page ()" funktionierte nicht, daher ist dies mein endgültiger Code (zum Umleiten der spezifischen Seiten "zu 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

Probieren Sie das Better WP Security Plugin. Zusammen mit einer Reihe hilfreicher Optimierungen zur Sicherung Ihrer Website bietet es einige Einstellungen, mit denen Sie SSL auf die Anmeldeseite oder das gesamte Back-End (falls Sie dies wünschen) und auf ausgewählte Seiten im Front-End pro Inhalt über eine Auswahl zwingen können Feld zum visuellen Editor hinzugefügt. Sehr einfach zu bedienen.

Natürlich muss zuerst SSL auf Ihrem Server eingerichtet werden, dh Sie müssen entweder ein selbstsigniertes Zertifikat installieren (nicht empfohlen) oder ein Zertifikat von einer Drittanbieter-Stelle bezahlen und auf Ihrem Server installieren.

1
Camajan

Im Folgenden finden Sie die beste "WordPress" -Methode. Ich habe sie vollständig kommentiert, damit Sie erklären können, was sie tut.

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

Nicht kommentierte Version für Ordentlichkeit :) (gleicher exakter Code)

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

Beide oben genannten Plugins scheinen veraltet zu sein oder wurden zumindest einige Zeit nicht gewartet. Das WordPress-https-Plugin scheint die beste Option zu sein und erzwingt SSL auf der gesamten Website oder nur auf bestimmten Seiten.

0
Drai