it-swarm.cn

有没有办法在某些页面上强制ssl

我想强制我的一些页面(带有表单的页面)上的安全连接,但我不希望整个站点使用ssl(减慢它)

有没有办法配置特定页面要求ssl?

6
Sruly

使用admin-ssl插件。对于wp之外的东西,请在Apache中使用重新排列规则

3
Ramprasad Prabhakar

新工作流程,因为不支持Admin SSL插件。

  • 使用插件 WP https

  • 查看设置

  • 如果您想要wp-admin的SSL,请将其添加到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();
                }
            }
    }
    

如果网址错误,可以使用较小的版本,但不能使用后备版本

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

对于WordPress 3.0及更高版本,admin-ssl插件不起作用。要使SSL正常工作,您需要执行两个步骤:

  1. 在wp-config.php文件中启用“通过SSL管理”选项( 请参阅此处 )。
  2. 在网站上安装 _ wpssl _ plugin。 (针对WordPress 3.0+更新)
  3. 在要通过SSL运行的页面上,添加名为“force_ssl”的元标记,并将值设置为“true”。

你应该在那之后全力以赴。

4
Dillie-O

我的解决方案存在多个问题(但它帮助了我)。我将针对以下情况提出我的解决方案:

  • Wordpress多站点
  • 在带有nginx代理的Apache上运行的vestacp上的服务器

首先我只使用了这个WP扩展名:“SSL不安全的内容修复程序”谁可以处理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

尝试 更好WP安全 插件。除了一系列有用的调整以保护您的网站外,它还有一些设置允许您强制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