Редирект на https, если нужно для сайта в сети WordPress MultiSite

По каким то причинам в сети сайтов 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();
});
Фото аватара
Antony I

Веб разработчик, специализация на лучших мировых практиках: WordPress, WooCommerce, NextJS, Strapi, JAMStack ...

Основные типы проектов: CMS, eCommerce, SEO, LMS, ECM, BPM

Подробнее...

Статей: 123

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *