只有在正确设置了SSL的情况下才执行函数

时间:2016-10-07 作者:Ethan O\'Sullivan

我已经created a plugin 将所有链接转换为与协议相关的URL,如下所示:

http://example.com -> //example.com
我还添加了一个功能,仅当SSL已启用并在网站上正确设置时,才强制HTTPS。以下函数将强制HTTPS,无论其设置是否正确:

add_action ( \'template_redirect\', \'force_https\', 1 );
function force_https() {
    if ( ! is_ssl() ) {
        wp_redirect(\'https://\' . $_SERVER[\'HTTP_HOST\'] . $_SERVER[\'REQUEST_URI\'], 301 );
        exit();
    }
}
但是,如果尚未为网站配置SSL,则会导致连接错误,用户将无法访问其网站。这是我想在它执行wp_redirect().

我的想法是检查get_home_url() 选项有https:// 在URL中:

if ( preg_match( \'/https:\\/\\//\', site_url() ) && ! is_ssl() ) {
有没有更好的检查方法?或者,如果我的插件中的第一个函数使所有链接协议都是相对的,那么甚至没有必要强制使用HTTPS吗?

2 个回复
最合适的回答,由SO网友:Ethan O\'Sullivan 整理而成

根据评论,没有简单的方法可以检查某人的网站是否正确设置了SSL。可能的选项包括插件中的设置,以便用户确认已设置SSL。

然而,一种自动化的方法是检查站点URL是否https:// 在里面。假设用户已正确设置SSL,因为如果用户尝试使用HTTPS设置域,则网站无法正确加载:

add_action( \'template_redirect\', \'wpse_241934_redirect_https\', 1, 1 );
function redirect_https() {
    # If \'https://\' is in the website\'s site URL and SSL is not being used, force HTTPS
    if ( preg_match( \'/https:\\/\\//\', site_url() ) && ! is_ssl() ) {
        wp_redirect( \'https://\' . $_SERVER[\'HTTP_HOST\'] . $_SERVER[\'REQUEST_URI\'], 301 );
        exit;
    }
}
对我来说,这个函数不是必需的,因为我的插件使所有URL协议都是相对的。如果某个网站仅运行SSL,那么这对其他想要执行某个功能的人仍然很有帮助。

SO网友:Mark Kaplun

如果站点不实际尝试通过https向其发送请求,则无法通过防故障的方法知道站点是否支持https(wp_get_remote 例如)。HTTPS通信可以在负载平衡器上终止,它和wordpress之间的通信通过http完成,因此,不明显您会找到任何特定于HTTPS的配置(必须在某个地方有一个配置,但它会随着站点的不同而变化)。

相关推荐

Redirect Css files to https

在哪里可以找到负责调用Css文件的文件,并测试它们的链接是http还是https?我想测试请求是否为https,如果是,那么很好,如果不是,请将其更改为https在函数中。php我找到了负责调用主题Css的函数,下面是它的代码:if (!function_exists(\'jobcareer_front_scripts\')) { function jobcareer_front_scripts() { global $jobcareer_options;