Блог/Modx и основное зеркало

Административная панель Modx и основное зеркало

Автор: Кудашев Сергей

Иногда сложно подобрать название для поста, но описать проблему, с которой постоянно сталкиваюсь, как-то иначе у меня не получилось. Суть проблемы, что если мною назначается основное зеркало, прописывается в .htaccess и после я случайно логинюсь в админку по дополнительному зеркалу, то я получаю массу артефактов как на Evolution, так и на Revolution. Так как каждый раз я начинаю искать причину, почему так происходит, а через полчаса чертыхаясь вспоминаю про данную проблему, решил написать этот пост.

Многие вебмастера следуя рекомендациям поисковых систем делают редирект с дополнительного зеркала на основное, например с www поддомена на основной домен. И любимая нами система Modx, что Evolution, что Revolution, предоставляет нам готовое решение в htaccess. Достаточна приписать основное зеркало и расскоментировать строки, и вуаля, у нас появилось основное зеркало.

# Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
#RewriteCond %{HTTP_HOST} .
#RewriteCond %{HTTP_HOST} !^example-domain-please-change\.com [NC]
#RewriteRule (.*) http://example-domain-please-change.com/$1 [R=301,L]
#
# or for the opposite domain.com -> www.domain.com use the following
# DO NOT USE BOTH
#
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\.devmarks\.ru [NC]
RewriteRule (.*) http://www.devmarks.ru/$1 [R=301,L]

Однако, как писалось в начале, если при этом залогиниться в админку по дополнительному зеркалу, то сразу вылезают артефакты. На всякий случай опишу их. Основные признаки, что вы попали в такую ситуацию для Evo это, как правило, не работающий визуальный редактор, либо не работающие его части, например, пустое окно tinymce при работе с картинками:

не работает панель Evolution

Основные признаки для Revo это пустое левое дерево, при этом пусты как дерево документов, остальные вкладки левого меню.

не работает панель Revolution

Найти решение этой проблемы в лоб, с использованием htaccess не получилось, так как для папки /manager/ в данном файле RewriteEngine выключен, а следовательно влиять через него мы не можем. В итоге было принято решение внести изменения в /manager/index.php.

Итак, если мы сделали основным зеркалом поддомен с www, то в начале index.php в папке /manager/ прописываем следующую конструкцию:

if(!preg_match('/^www\./',$_SERVER['HTTP_HOST'])) header('Location: http://www.'.$_SERVER['HTTP_HOST'].($_SERVER['REQUEST_URI']?$_SERVER['REQUEST_URI']:''));

Если же мы сделали основным зеркалом домен без www, то в начале index.php в папке /manager/ прописываем следующую конструкцию:

if(preg_match('/^www\./',$_SERVER['HTTP_HOST'])) header('Location: http://'.str_replace('www.','',$_SERVER['HTTP_HOST']).($_SERVER['REQUEST_URI']?$_SERVER['REQUEST_URI']:''));

Решение далеко от идеала, к тому же приходится править код, а следовательно следить, чтобы он не затерся при очередном апдейте. Но на данный момент другого решения не нашел. Если у кого-то есть решение получше, напишите в комментариях.

UPD: Еще один момент, который стоит отметить, что на некоторых хостингах 301 редирект на основное зеркало можно настроить в настройках веб сервера. На них подобных танцев с бубном не нужно.

Комментарии (0)