По каким то причинам в сети сайтов WordPress Multisite не всегда работает автоматический принудительный редирект на https протокол.
Например есть сайт https://wpcraft.ru, но если открыть страницу http://wpcraft.ru/contacts – то авторедиректа на https не будет. Это может создать дубли в поиске и подпортить SEO. Да и просто не красиво.
В идеальной ситуации это все решается на уровне веб-сервера типа nginx. Там делаем редирект и все ок.
Но возникла ситуация когда не все сайты в сети должны быть с https. Потому решение с nginx не катит. Потому что оно все сайты начнет редиректить. Нужно выборочное решение.
Потому написал сниппет, который проверяет есть ли https в опции сайта site_url:
- если уже есть https то ничего не делаем
- если сайт должен открываться в http:// то тоже ничего не делаем
- но если идет попытка работать по http, а адрес сайта содержит https – то делаем редирект.
Код залил в mu-plugins:
<?php
/**
* Redirect to https if set https on site url
* else not redirect
*/
add_action('init', function(){
if(is_ssl()){
return;
}
$data = get_blog_details(get_current_blog_id());
$site_url = $data->siteurl;
if( strrpos($site_url, 'http://') !== false){
return;
}
header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], true, 301);
die();
});