Есть большой проект на drupal 6, нод в нём уж около 100000. Для каждой ноды существовали алиасы, пока кто-то (незнаю кто, сам работаю недавно) каким то образом не напортачил и теперь у разных нод один и тот же алиас. Привело это к тому, что даже если строке адреса принудительно вбить (далее просто пример) node/422067, то всеравно drupal редиректит на node/4222222. К счастью так случилось не со всеми нодами, но несколько тысяч задело. Сейчас передомной стоит задача починить это...
Вот так это выглядит в базе:
mysql> select dst, src from url_alias where dst = 'nedvizhimost/zolotoj_malchik_-_luchshij_futbo' ORDER BY src;
+-----------------------------------------------+-------------+
| dst | src |
+-----------------------------------------------+-------------+
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/12465 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/12465 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/12465 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/12465 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/12465 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/12465 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/12465 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/12465 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/12465 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/12465 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/361915 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/361915 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/361915 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/361915 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/361915 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/361915 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/361915 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/361915 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/361915 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/361915 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/412855 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/412855 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/412855 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/412855 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/412855 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/412855 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/412855 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/412855 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/412855 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/412855 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/422778 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/422778 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/422778 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/422778 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/422778 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/422778 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/422778 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/422778 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/422778 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/422778 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/431331 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/431331 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/431331 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/431331 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/431331 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/431331 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/431331 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/431331 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/431331 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/431331 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/754762 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/754762 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/754762 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/754762 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/754762 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/754762 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/754762 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/754762 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/754762 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/758355 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/758355 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/758355 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/758355 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/758355 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/758355 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/758355 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/758355 |
| nedvizhimost/zolotoj_malchik_-_luchshij_futbo | node/758355 |
+-----------------------------------------------+-------------+
68 rows in set (0.00 sec)
Здорово да?
Что я уже попробовал. Удалил из таблицы алиасов все записи связанные с одним и тем же алиасом. Вручную алиасы пересоздаются корректно, но править все это руками как то "непосильно". Пробовал через админку обновить алиасы, но алиасы создаются только для тех нод, где галочкой отмечено использовать Automatic alias. Там где галочка не стоит, алиас не создается, а таких нод больше чем половина. Удалить все алиасы и сгенерировать заного - НЕЛЬЗЯ, так как портал рабочий.
Назревает 2 решения:
1. Каким то образом пройтись по всем нодам и включить галку Automatic alias, а потом серез админку сгенерить недостающие
2. Каким то образом посмотреть у каких нод нет алиаса и сгенерировать их с помощью какого нибудь самописного скрипта
Вот тут то мне и не хватает опыта... Подскажите кто знает как поступить?
Комментарии
Сделай копию сайта для тестов.
Сделай выборку всех алиасов из таблицы
SELECT src,count(*) as k FROM `url_alias` GROUP BY dst HAVING k > 1
Должны показаться все ноды,у которых дублируется алиас.
Сносишь их алиасы. (это наверное скриптом лучше сделать)
Вытаскиваешь вьюсом ноды без алиасов.
Ставишь [module=views_bulk_operations] и через него создаешь алиасы в этой вьюхе, это быстро.
Проходишься по настройкам типов материалов, проставляешь всем галку "автоматический алиас". теперь не должны создаваться ноды без алиасов.
Тестируешь.
После этого повторяешь всё это на боевом.
Огромное спасибо за совет, буду пробовать!