我已经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吗?
最合适的回答,由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,那么这对其他想要执行某个功能的人仍然很有帮助。