问题描述
我想在某些页面 (带表单的页面) 上强制安全连接,但是我不希望整个网站使用 ssl(减慢它)
有没有办法配置特定页面来要求 ssl?
最佳解决方案
使用 admin-ssl 插件。对于 wp 之外的东西,在 apache 中使用 rewriite 规则
次佳解决方案
新的工作流程,因为不支持管理 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>
-
如果您在 front-end 中将特定页面/帖子设置为 SSL,则使用以下插件或在 post /page 的编辑器中设置选项; 只有当你有这种插件 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;
}
第三种解决方案
对于 WordPress 3.0 及以上版本,admin-ssl 插件不起作用。为了使 SSL 工作,您需要采取两个步骤:
-
启用 wp-config.php 文件 (see here) 中的 「管理层 SSL」 选项。
-
在网站上安装 WPSSL 插件。 (更新为 WordPress 3.0+)
-
在要通过 SSL 运行的页面上,添加名为”force_ssl” 的元标记,并将其值设置为”true” 。
你应该全部设定好。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。