Каждый раз, обновляя ядро Drupal, в первую очередь посредством Drush, мы теряем изменения, внесенные вручную в файл robots.txt. Хорошая идея для такого случая – держать бэкап этого файла. Но в суете внести потерянные изменения зачастую забываешь, что потом приводит к неприятным неожиданностям при очередной диагностике сайта тем же «Яндекс Вебмастером».

Хорошим решением является модуль «RobotsTxt», отлично выполняющий свою функцию для трех последних версий Drupal. При включенном модуле содержимое robots.txt редактируется в админке и отдается по соответствующему адресу. Однако с этим связана небольшая, но крайне неприятная особенность: он наотрез отказывается работать при физическом наличии файла robots.txt в корне сайта. Вкупе с забывчивостью администратора это приводит к тем же результатам, когда с очередным обновлением файл возвращается на свое законное место.

После пары десятков таких инцидентов возникла идея придумать что-нибудь простое, но эффективное, которая со временем вылилась в модуль «Custom robots.txt».

Суть решения состоит в отделении дефолтной и кастомной частей содержимого файла. Все, что мы хотим дописать, редактируется в административной части и после сохранения дописывается в конец файла. Проверка на наличие в файле внесенных администратором изменений происходит также по крону. Таким образом, даже при перезаписи robots.txt во время обновления ядра все потерянные изменения восстанавливаются после первого же крона без затирания пришедшего с обновлением дефолтного содержимого.

В настоящий момент имеется версия для седьмого Друпала. Если идея покажет себя достойным образом, не исключено портирование под «Восьмерку».

Комментарии

meles

Также можно отключить мапинг файлов в скаффолде.
Открываем composer.json:
....

"extra": {
"drupal-scaffold": {
"locations": {
"web-root": "web/"
},
"file-mapping": {
"[web-root]/robots.txt": false
}
},

....

Да, я писал об этом в issue про порт для Восьмёрки, но общественность захотела в том числе и такое решение, что в итоге и было реализовано.

Добавить комментарий