
Редирект на https, если нужно для сайта в сети WordPress MultiSite
29 января 2019
По каким то причинам в сети сайтов 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();
});



