Настройка редиректа страниц через .htaccess
Что такое файл «.htaccess»
Файл .htaccess – файл конфигурации сервера Apache. Служит для того, чтобы с помощью команд задавать настройки http-сервера для папок, отдельных страниц сайта и пользователей. Подходит, когда необходимы точечные настройки для отдельных директорий.
Файл считается универсальным и может быть использован для решения множества задач: для корректной и безопасной работы сайта, оптимизации, настройки параметров отображения и многих других. Список всех возможных директив .htaccess прописан на официальном сайте Apache. Также можно ознакомиться с ними на русскоязычном сайте.
Файл .htaccess находится в корневой папке сайта, а редактировать можно в любом текстовом редакторе. Изменения файла не требуют перезапуск сервера – они сразу вступают в силу.
Действие команд распространяется на документы, находящиеся с файлом в одной директории. Если во вложенной директории есть другой .htaccess, тогда уже он будет действовать на нее.
Правила для файла:
- каждая команда начинается с новой строки;
- после # можно добавить комментарий;
- URL на кириллице, необходимо переводить на Punycode.
Основные спецсимволы для .htaccess:
Символ | Обозначение |
---|---|
. (точка) | произвольный символ |
() | выделенная группа |
^ | начало строки |
$ | конец строки |
| | альтернативный выбор (логический или) |
? | Ставится после одного или группы символов. Означает, что могут как быть, так и отсутствовать |
[abc] | перечень допустимых знаков, совпадающих с a, b, или с |
[^abc] | список недопустимых символов |
* | указывает на то, что предыдущий знак может повторяться 0 или больше раз |
[abc]* | команда найдет идущие подряд символы из заданного набора |
[^abc]* | противоположная предыдущей команде |
(.*) | (точка, звездочка) любой набор символов |
“.*” | ищет все подстроки между кавычками |
\w | цифра, буква или подчеркивание _ |
\d | замена цифры |
\D | заменить любой знак, кроме цифры |
[0-9] | допустимые цифры |
[a-z] | допустимы буквы от a до z в нижнем регистре |
[A-Z] | допустимы буквы от A до Z в верхнем регистре |
[a-Z] | допустимы буквы от A до Z в любом регистре |
Основные переменные:
%{REQUEST_URI} | Строка запроса (без доменного имени, и GET параметров), пример "/server/htaccess/" |
%{HTTP_HOST} | Доменное имя, например "mitup.ru" |
%{QUERY_STRING} | Строка GET параметров |
%{SCRIPT_FILENAME} | Полный путь к веб странице на сервере |
%{DOCUMENT_ROOT} | Содержит путь к корневой директории сервера |
%{HTTP_USER_AGENT} | Содержит информацию о типе и версии браузера и операционной системы посетителя |
%{HTTP_REFERER} | Приводится адрес страницы, с которой посетитель пришел на данную страницу |
%{HTTP_COOKIE} | Список COOKIE, передаваемых браузером |
%{HTTP_FORWARDED} | Страница, непосредственно с которой перешел пользователь |
%{HTTP_ACCEPT} | Описываются предпочтения клиента относительно типа документа |
%{REMOTE_ADDR} | IP-адрес посетителя |
%{REMOTE_HOST} | Адрес посетителя в нормальной форме - например, user.net.com |
%{REMOTE_IDENT} | Имя удаленного пользователя. Имеет формат имя.хост, например, user.www.mitup.net.com |
%{REMOTE_USER} | То же, что и REMOTE_IDENT, но содержит только имя. Пример: user |
%{REQUEST_METHOD} | Позволяет определить тип запроса (GET или POST) |
Подробнее о переменных в официальной документации Apache.
Редирект при помощи .htaccess
Для того, что прописать редирект через .htaccess сайта, устанавливаются 2 директивы:
- RewriteCond – определяет условие, при котором происходит преобразование.
- RewriteRule – задает правило перенаправления. Синтаксис: RewriteRule Шаблон Подстановка [flag], где # flag – необязательное поле, указывающее дополнительные опции.
1. 301 редирект одной страницы на другую
Пример:
Redirect 301 /url1/ https://mitup.ru/url2 |
где:
- /url1/ — адрес страницы, с которой перенаправлять. Адрес нужно указывать от корневой директории сайта, без указания протокола и домена.
- https://mitup.ru/url2 — адрес страницы, на которую нужно редиректить. Указывать нужно полный адрес — с протоколом и доменом.
2. 301 редирект с www на без www
Пример (с www.mitup.ru на mitup.ru):
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^(.*)$ https://mitup.ru/$1 [R=301,L] |
где:
- RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
- {HTTPS_HOST} – переменная, которую будем анализировать и сверять с подстрокой mitup.ru внутри RewriteCond.
- ^ – начало строки.
- www\.(.*) – с какого символа/вложенности будем применять правило. В данном случае с www.
- [NC] – регистронезависимая проверка.
- RewriteRule ^(.*)$ https://mitup.ru/$1 [R=301,L]
- (.*)$ – с какого символа/вложенности будем применять правило.
Где $ – подстановка символов. - http://www.mitup.ru/$1 – куда перенаправляем. Где $1 – подстановка пришедших символов из (.*).
- [R=301,L] – флаги. R – вызывает 301 редирект, L (last) – указывает на последнее правило и остановку процесса преобразования на этом месте. Подробнее про флаги.
- (.*)$ – с какого символа/вложенности будем применять правило.
Таким образом, мы перенаправляем пользователя на без www при помощи редиректа и сохраняем адрес страницы сайта, на который перешел пользователь.
3. 301 редирект с HTTP на HTTPS
Есть несколько вариантов настройки редиректа с HTTP на HTTPS через .htaccess.
Пример №1:
RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} |
где,
- RewriteCond %{HTTPS} off – проверка на отсутствие HTTPS протокола;
- %{HTTPS} – это переменная сервера, которая содержит значение "on" или "off" в зависимости от того, был ли запрос к серверу выполнен через защищенное соединение HTTPS или нет.
- off – это ключевое слово, которое указывает на значение переменной %{HTTPS} и означает, что запрос был выполнен без защищенного соединения HTTPS.
- RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} – редирект с любого адреса сайта, на который попал пользователь с подстановкой протокола HTTPS в начале URL;
- (.*) – регулярное выражение, которое обозначает любой символ. Это группа захвата, которая будет использована в дальнейшем.
- https://%{HTTP_HOST}%{REQUEST_URI} – URL-адрес, на который будет происходить перенаправление. Он состоит из протокола ("https://"), имени хоста ("% {HTTP_HOST}") и пути запроса ("% {REQUEST_URI}"). Знак процента ("%") указывает, что это переменная сервера, которая будет заменена соответствующим значением.
Пример №2:
RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] |
где:
- RewriteCond %{SERVER_PORT} !^443$ – проверка на отсутствие 443 порта у сайта (443 порт отвечает за HTTPS протокол). Проверка идентична примеру выше, только сравнивается не протокол, а порт.
- %{SERVER_PORT} – переменная сервера, которая содержит номер порта, на котором происходит текущий запрос.
- !^443$ – регулярное выражение, которое проверяет, не равен ли текущий порт 443. Здесь ! – отрицание, ^ – начало строки, 443 - число, соответствующее порту HTTPS, а $ – конец строки. Если текущий порт не равен 443 (т.е, если запрос не выполняется через HTTPS), то условие считается истинным, и перезапись URL-адреса может быть выполнена.
- RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} – была рассмотрена в примере выше.
Пример №3:
RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] |
Переменные совпадают с настройкой редиректа в примере №1, с небольшими изменениями,
где:
- RewriteCond %{HTTPS} off – проверка на отсутствие HTTPS протокола;
- %{HTTPS} – это переменная, которая содержит значение "on" или "off" в зависимости от того, происходит ли соединение по защищенному протоколу HTTPS или нет.
- off – это значение, с которым сравнивается переменная %{HTTPS} в данном случае. То есть, данная команда проверяет, равна ли переменная %{HTTPS} значению "off". Если это так, то условие считается истинным, и выполняется соответствующее действие (например, перенаправление на защищенный протокол).
- RewriteCond %{HTTP:X-Forwarded-Proto} !https – проверка на отсутствие в URL HTTPS протокола, информации о схеме исходного запроса клиента (будь то http или https-запрос);
- %{HTTP:X-Forwarded-Proto} – переменная, которая используется для доступа к значению заголовка X-Forwarded-Proto в запросе. Значение этого заголовка определяет, был ли запрос отправлен по HTTPS или HTTP.
- !https – условие проверки. В данном случае, оно означает, что условие будет выполнено, если значение переменной %{HTTP:X-Forwarded-Proto} не равно "https". То есть, если запрос был отправлен по HTTP, а не по HTTPS.
- RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} – была рассмотрена выше.
4. 301 редирект дублей со слешем
Пример настройки редиректа через .htaccess со страниц вида https://mitup.ru на https://mitup.ru/:
RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L] |
где:
- RewriteCond %{REQUEST_URI} /+[^\.]+$ – проверяет, содержит ли текущий URL-адрес один или более слешей, за которыми не следует точка (которая может указывать на расширение файла);
- %{REQUEST_URI} Это переменная, содержащая запрошенный URL без домена.
- /+ – означает, что перед точкой (.) может быть один или несколько символов слэша (/). Знак + является квантификатором, указывающим, что предыдущий символ должен встретиться один или более раз.
- [^\.]+ – означает, что после последнего слэша не должно быть точки (.). Знак ^ означает отрицание, т.е. любой символ, кроме точки. Знак + также указывает на то, что предыдущий символ должен встретиться один или более раз.
- $ – означает, что шаблон должен соответствовать концу строки (URI).
- RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L] – редиректит запросы со страниц сайта, которые не заканчиваются на слеш, на новый адрес с добавлением слеша в конце.
- ^(.+[^/])$ – регулярное выражение, которое соответствует любому URI (Uniform Resource Identifier), заканчивающемуся не на слэш (/). Знак ^ обозначает начало строки, знак $ обозначает конец строки. Квантификатор + обозначает "один или более раз", а [^/] означает "любой символ, кроме слэша".
- %{REQUEST_URI}/ – новый адрес страницы сайта, на который будет настроен редирект. Он будет состоять из запрошенного URI и слэша (/) в конце.
- [R=301,L] – флаги указывают на тип перенаправления и прерывание обработки правил перезаписи. R=301 означает "постоянное перенаправление" (301 Moved Permanently), что говорит браузеру и поисковым системам, что этот URL был окончательно перемещен на новый URL. L означает "последнее правило" (last), что говорит серверу прервать дальнейшую обработку правил по указанному шаблону.
Пример настройки редиректа через .htaccess со страниц вида https://mitup.ru/ на https://mitup.ru.
RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteRule ^(.*)\/$ /$1 [R=301,L] |
где:
- RewriteCond %{REQUEST_URI} !\? – проверяет, не содержит ли текущий URL-адрес без знака вопроса;
- %{REQUEST_URI} – переменная, содержащая запрошенный URI (Uniform Resource Identifier) без домена.
- !\? – регулярное выражение, которое проверяет отсутствие знака вопроса (?) в URI. Символ ! означает отрицание, а знак вопроса (?) соответствует знаку вопроса в URL. Слеш перед ? экранирует символ для сервера, чтобы он считывался как текст.
- далее идут похожие директивы, которые проверяют URL на содержание других знаков;
- RewriteRule ^(.*)\/$ /$1 [R=301,L] – выполняет перенаправление (редирект) для всех URL-адресов, которые заканчиваются на слеш "/", на соответствующий URL-адрес без слеша.
- ^(.*)\/$ – регулярное выражение, которое соответствует любому URI (Uniform Resource Identifier), заканчивающемуся на слэш (/). Знак ^ обозначает начало строки, а знак $ обозначает конец строки. Квантификатор * обозначает "любой символ, ноль или более раз", а / обозначает слэш (/).
- /$1 – URL (URI), на который будет произведен редирект. Он будет состоять из той же части URI, которая находится перед последним слэшем (/) без домена, т.к. в шаблоне мы указываем %{REQUEST_URI} – эта переменная содержит URI без домена.
- [R=301,L] – был рассмотрен в примере выше.
5. 301 редирект с index.php в конце на без index.php
Пример настройки редиректа с index.php в конце URL через htaccess:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://name.site/ [R=301,L] |
где:
- RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/ – проверяет, содержит ли строка запроса, отправленного клиентом (HTTP-запрос), текст "/index.php";
- %{THE_REQUEST} – переменная сервера Apache, содержащая первую строку запроса HTTP от клиента, включая метод запроса HTTP, URI (Uniform Resource Identifier) и версию протокола HTTP.
- ^[A-Z]{3,9}\ /index\.php\ HTTP/ – регулярное выражение, которое соответствует строке запроса, содержащей имя файла "index.php". Знак ^ обозначает начало строки, а $ обозначает конец строки. [A-Z] обозначает любой символ в верхнем регистре от A до Z, а {3,9} обозначает повторение предыдущего символа от 3 до 9 раз. Слэш (/) и точка (.) экранированы обратным слэшем (), чтобы они были интерпретированы как обычные символы. HTTP/ обозначает окончание строки запроса.
- RewriteRule ^index\.php$ http://name.site/ [R=301,L] – выполняет перенаправление (редирект) для всех запросов с index.php на страницу http://name.site/.
- ^index\.php$ – регулярное выражение, которое соответствует только URL, содержащему полное имя файла "index.php" в корневом каталоге сайта. Знак ^ обозначает начало строки, а $ обозначает конец строки. Точка (.) экранирована обратным слэшем (), чтобы она была интерпретирована как обычный символ.
- http://name.site/ – новый URL, на который будет происходить редирект запроса.
- [R=301,L] – был рассмотрен выше.
6. 301 редирект с верхнего регистра в url на нижний
Данный способ содержит большой набор директив, но не требует доступа к настройкам Apache. Официальный источник: Redirect htaccess for Uppercase to Lowercase.
RewriteEngine On RewriteBase / # If there are caps, set HASCAPS to true and skip next rule RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1] # Skip this entire section if no uppercase letters in requested URL RewriteRule ![A-Z] - [S=28] # Replace single occurance of CAP with cap, then process next Rule. RewriteRule ^([^A]*)A(.*)$ $1a$2 RewriteRule ^([^B]*)B(.*)$ $1b$2 RewriteRule ^([^C]*)C(.*)$ $1c$2 RewriteRule ^([^D]*)D(.*)$ $1d$2 RewriteRule ^([^E]*)E(.*)$ $1e$2 RewriteRule ^([^F]*)F(.*)$ $1f$2 RewriteRule ^([^G]*)G(.*)$ $1g$2 RewriteRule ^([^H]*)H(.*)$ $1h$2 RewriteRule ^([^I]*)I(.*)$ $1i$2 RewriteRule ^([^J]*)J(.*)$ $1j$2 RewriteRule ^([^K]*)K(.*)$ $1k$2 RewriteRule ^([^L]*)L(.*)$ $1l$2 RewriteRule ^([^M]*)M(.*)$ $1m$2 RewriteRule ^([^N]*)N(.*)$ $1n$2 RewriteRule ^([^O]*)O(.*)$ $1o$2 RewriteRule ^([^P]*)P(.*)$ $1p$2 RewriteRule ^([^Q]*)Q(.*)$ $1q$2 RewriteRule ^([^R]*)R(.*)$ $1r$2 RewriteRule ^([^S]*)S(.*)$ $1s$2 RewriteRule ^([^T]*)T(.*)$ $1t$2 RewriteRule ^([^U]*)U(.*)$ $1u$2 RewriteRule ^([^V]*)V(.*)$ $1v$2 RewriteRule ^([^W]*)W(.*)$ $1w$2 RewriteRule ^([^X]*)X(.*)$ $1x$2 RewriteRule ^([^Y]*)Y(.*)$ $1y$2 RewriteRule ^([^Z]*)Z(.*)$ $1z$2 # If there are any uppercase letters, restart at very first RewriteRule in file. RewriteRule [A-Z] - [N] RewriteCond %{ENV:HASCAPS} TRUE RewriteRule ^/?(.*) /$1 [R=301,L] |
где:
- RewriteEngine On – включает модуль "mod_rewrite";
- RewriteBase / – указывает на корневую директорию сайта, относительно которой будут применяться все правила переписывания URL-адресов в файле конфигурации;
- # If there are caps, set HASCAPS to true and skip next rule – комментарий, указывает, что если в тексте содержатся заглавные буквы, то переменная HASCAPS будет установлена в значение true и следующее правило будет пропущено;
- RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1] – выполняет проверку наличия заглавных букв в URL-адресе и устанавливает переменную HASCAPS равной "TRUE", если в URL-адресе присутствуют заглавные буквы;
- [A-Z] – регулярное выражение, которое соответствует любой заглавной букве в URL.
- - - символ тире, который указывает, что нет замены для URL.
- [E=HASCAPS:TRUE] – флаг перезаписи, который устанавливает переменную окружения "HASCAPS" в значение "TRUE".
- ,S=1 – флаг перезаписи, который указывает модулю mod_rewrite, что это первое правило перезаписи в списке, и что выполнение правил перезаписи должно продолжаться сразу после этого правила (то есть, следующие правила не должны быть выполнены, если данное правило сработало).
- # Skip this entire section if no uppercase letters in requested URL – комментарий указывает на то, что последующий блок правил перезаписи (или другой код), будет пропущен, если запрашиваемый URL-адрес не содержит заглавных букв (uppercase letters);.
- RewriteRule ![A-Z] - [S=28] – проверяет, содержит ли URL-адрес символы в верхнем регистре, и, если нет, она пропускает следующие 28 правил;
- ![A-Z] – регулярное выражение, которое соответствует любому символу в URL, за исключением заглавных букв.
- - – символ тире, который указывает, что нет замены для URL.
- [S=28] – флаг перезаписи, который указывает модулю mod_rewrite пропустить следующие 28 правил перезаписи.
- # Replace single occurance of CAP with cap, then process next Rule – комментарий описывает правило RewriteRule, которое выполняет замену первого вхождения заглавной буквы "CAP" на строчную букву "cap", а затем переходит к следующему правилу;
- RewriteRule ^([^A]*)A(.*)$ $1a$2 – заменяет заглавную букву "A" на строчную букву "a";
- ^ - символ начала строки.
- ([^A]*) – регулярное выражение, которое соответствует любому символу, за исключением заглавной буквы "A", 0 или более раз.
- A – символ заглавной буквы "A".
- (.*) – регулярное выражение, которое соответствует любому символу 0 или более раз.
- $1a$2 заменяет URL на строку, которая состоит из:
- $1 содержимого первой группы, т.е. всех символов перед первым вхождением заглавной буквы "A".
- a символа строчной буквы "a".
- $2 содержимого второй группы, т.е. всех символов после первого вхождения заглавной буквы "A".
- следующие правила однотипны и направлены на замену всех заглавных букв на строчные;
- # If there are any uppercase letters, restart at very first RewriteRule in file – комментарий описывает действие, которое нужно выполнить, если URL-адрес содержит хотя бы одну прописную (большую) букву;
- RewriteRule [A-Z] – [N] – если в адресе содержатся заглавные буквы, Apache выполнит редирект на ту же страницу сайта, но без заглавных букв;
- [A-Z] – это регулярное выражение, которое соответствует любой заглавной букве в URL. Оно указывает на шаблон, который должен быть найден в URL.
- - - это символ дефиса, который используется в качестве замены для найденной заглавной буквы.
- [N] – это флаг перезаписи, который указывает модулю mod_rewrite продолжить обработку URL с того же места, где была обнаружена заглавная буква. Это означает, что правило перезаписи должно быть выполнено еще раз, начиная с этого места, в то время как обычно правило перезаписи выполняется один раз.
- RewriteCond %{ENV:HASCAPS} TRUE – правило проверяет переменную среды "HASCAPS" на наличие значения "TRUE";
- %{ENV:HASCAPS} – специальная переменная, которая обозначает значение переменной окружения "HASCAPS". Она начинается с %, за которым следует название переменной окружения в формате ENV:HASCAPS.
- TRUE – значение, с которым переменная окружения "HASCAPS" сравнивается. Если переменная окружения "HASCAPS" имеет значение "TRUE", то условие считается выполненным.
- RewriteRule ^/?(.*) /$1 [R=301,L] – редиректит все запросы, включая пустые, на страницу сайта без начального слеша.
- Pattern: ^/?
- ^ – Этот символ означает, что URL должен начинаться с соответствующей строки.
- /? – регулярное выражение соответствует нулю или одному слешу в начале URL.
- Substitution: /$1
- /$1 – означает, что весь URL запроса, начиная со второго символа, будет заменен на $1. Переменная $1 представляет первое вхождение шаблона в Pattern.
- Flags: [R=301,L]
- R=301 – флаг указывает на редирект с кодом ответа 301, который означает, что запрашиваемая страница сайта была окончательно перенесена.
- L – флаг означает, что выполнение дальнейших правил должно быть прекращено, если это правило перезаписи сработало.
- Pattern: ^/?
7. 301 редирект на другой домен
При переезде на другой домен редирект необходимо устанавливать, чтобы не потерять клиентов, которым будут попадаться еще старые ссылки на прежний адрес.
Пример настройки:
RewriteEngine On RewriteRule ^(.*)$ http://www.mitup.ru/$1 [R=301,L] |
где:
- RewriteRule ^(.*)$ http://www.mitup.ru/$1 [R=301,L] – выполняет редирект всех запросов на новый адрес сайта http://www.mitup.ru/ с кодом ответа 301.
- ^(.*)$ – это регулярное выражение, которое соответствует любому URL, включая все символы и путь к файлу.
- http://www.mitup.ru/$1 – URL-адрес, на который происходит перенаправление. $1 – это backreference, который содержит всю строку, соответствующую регулярному выражению в части ^(.*)$, и вставляет ее в конец URL-адреса назначения.
- [R=301,L] – рассмотрен выше.
8. 301 редирект для страниц с 404 ответом сервера на главную
Такой htaccess редирект с одной страницы с 404 ошибкой актуален для интернет-магазинов, когда товары распроданы, но терять пользователей не хочется.
Пример
ErrorDocument 404 http://www.site.com/301.html |
где:
- ErrorDocument 404 http://www.site.com/301.html – определяет адрес URL-страницы, которая будет отображаться вместо стандартной страницы ошибки 404 (Not Found) на сайте, когда запрашиваемый ресурс не может быть найден на сервере.
- ErrorDocument – ключевое слово, которое указывает, что это директива настройки страницы ошибки.
- 404 – код ошибки HTTP, которая настраивается в данном случае. Код 404 означает, что запрошенная страница не была найдена на сервере.
- http://www.site.com/301.html – URL-адрес страницы ошибки, которая будет отображаться пользователю, если произойдет ошибка 404.
Генерация правил редиректов
Чтобы не допустить ошибки при настройке редиректа, можно воспользоваться сервисами для автоматического формирования. Примеры сервисов: .htaccess Generator, 301 Redirect Code Generatora, Winginx (возможно перевести код для веб-сервера Nginx). Результаты, полученные при помощи сервисов, также необходимо внимательно проверять.
Заключение
Существует множество способов настроить 301 редирект. Через файл настройки .htaccess это сделать просто и эффективно, но в то же время опасно, так как ошибка может повлиять на весь каталог. Для работы с любыми настройками конфигурации существует свод правил, которых необходимо придерживаться, и также следует тщательно проверять настройки.
Искренне ваши, ребята из Mitup