itstnd@yandex.ru

Консультации

Разработка и поддержка сайтов

Редирект с www на главное зеркало и решение проблемы mixed content

 apache, SEO, wordpress    

Редирект с www на главное зеркало сайта

Это можно сделать несколькими способами:

1. Через .htaccess (рекомендуется)

Добавьте в .htaccess перед WordPress правилами:

# Редирект с www на non-www
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

# Или если у вас без SSL:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

2. В WordPress через wp-config.php

Добавьте в wp-config.php (перед строкой «That’s all, stop editing!»):

php
define('WP_HOME', 'https://ваш-домен.ru');
define('WP_SITEURL', 'https://ваш-домен.ru');

3.Редирект с www на главное зеркало Через functions.php вашей темы

Добавьте в functions.php:

php
// Редирект с www на non-www
add_action('init', function() {
    if (strpos($_SERVER['HTTP_HOST'], 'www.') === 0) {
        wp_redirect('https://' . substr($_SERVER['HTTP_HOST'], 4) . $_SERVER['REQUEST_URI'], 301);
        exit;
    }
});

4. Решения для Mixed Content

A. В functions.php добавьте:

php
// Замена http на https в контенте
function force_https_content($content) {
    if (is_ssl()) {
        $content = str_replace('http://', 'https://', $content);
    }
    return $content;
}
add_filter('the_content', 'force_https_content');
add_filter('widget_text', 'force_https_content');

// Принудительное использование HTTPS для всех URL
function force_https() {
    if (is_ssl()) {
        ob_start(function($buffer) {
            return str_replace('http://', 'https://', $buffer);
        });
    }
}
add_action('init', 'force_https');

B. Плагины для решения проблемы mixed content:

  1. Really Simple SSL — автоматически исправляет mixed content
  2. SSL Insecure Content Fixer
  3. Better Search Replace — для массовой замены URL в базе данных

C. Замена URL в базе данных:

Выполните SQL запрос (сделайте backup!):

sql
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://www.ваш-домен.ru', 'https://ваш-домен.ru');
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'http://www.ваш-домен.ru', 'https://ваш-домен.ru');
UPDATE wp_options SET option_value = REPLACE(option_value, 'http://www.ваш-домен.ru', 'https://ваш-домен.ru') WHERE option_name = 'home' OR option_name = 'siteurl';

D. Дополнительно в wp-config.php:

php
// Принудительный HTTPS для админки и сайта
define('FORCE_SSL_ADMIN', true);
if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
    $_SERVER['HTTPS'] = 'on';
    $_SERVER['SERVER_PORT'] = 443;
}

Порядок действий при mixed content:

  1. Сначала настройте редирект через .htaccess
  2. Обновите URL в настройках WordPress (Настройки → Общие)
  3. Исправьте mixed content через плагин или код
  4. Проверьте редирект и SSL на SSL Labs
  5. Добавьте сайт в Google Search Console с обоими вариантами домена

После настройки проверьте:

  • Все ли страницы редиректят правильно
  • Нет ли ошибок mixed content в консоли браузера
  • Работает ли HTTPS (зеленый замок)