На сайте образовалось как-то слишком много дублей и лишних страниц, хотелось бы их поубивать. Сам что-то решения не могу найти, может подскажете.
Есть словарь вида
razdel1
razdel2
razdel3
Прописаны такие синонимы адресов для всех разделов этого словаря:
category/razdel1/voc
category/razdel2/voc
category/razsel3/voc
Т.к. стандартный вывод списков нод меня не устраивал, создал во вьюс странички, выводящие список нод по терминам, адреса страниц такие:
categore/razdel1
category/razdel2
category/razdel3
Соответственно адрес материала получается такой category/razdel1/voc/node-title
И вот таким образом образовались лишние страницы и дубли, при обращении к которым хотелось бы получить "Страница не найдена".
1. При обращении к несуществующему материалу по адресу сategory/razdel1/bla-bla-bla грузится сategory/razdel1/ и ответ сервера 200, хотя нужен 404. Ситуация еще неприятна тем, что раньше на домене весел сайт со схожей структурой с кучей материалов с такого рода адресами, сейчас получается, что эти адреса остались работоспособными и породили сотни дублей. Такое ощущение, что проблема решается парой кликов в модуле вьюс/при несуществующем адресе отдавать 404, а не страницу/, но что надо сделать так и не додумался.
2. Адреса материалов у меня category/razdel1/voc/title-node, соответственно по адресу category/razdel1/voc мы получаем список всех нод, принадлежащих этому термину. А т.к. список нод я вывожу отдельно через вьюс, то опять таки получаются дубли. Нужно запретить доступ к просмотру списков нод, принадлежащих определённым терминам словаря, при этом не затронув доступ к сами нодам. Наверняка же есть какая-то стандартная друпаловская фича для этого.
Комментарии
Может, Global Redirect попробуете?
уж лучше 301 отдавать, чем 404
Geldora, спасибо, не знал про этот модуль. Хотелось бы конечно без использования редиректов обойтись, но если не получится, то наверное придется его и использовать, либо нечто аналогичное.
RxB, хотелось бы именно 404, т.к. при обращении к site.ru/bla-bla-bla ответ 404, думаю правильно было бы тоже самое получать и при обращении к site.ru/сategory/razdel1/bla-bla-bla, а не 301
Ок, сейчас, минутку
Отталкивайтесь отсюда
if((arg(0) == 'category') && (arg(1) == 'razdel1') && (arg(2) == 'bla-bla-bla')){ //arg(2) поменять\заменить\проверять is_string\написать регулярник
return drupal_not_found();
}
}
Ммм... это как я понял надо вставить в агрументы во вьюс странички? Аргументы раньше не использовал, каюсь. Видимо время пришло начать в них разбираться. За задание вектора движения, спасибо.
Нет, вставить это можно в маленький самописный модуль, или добавить в существующий, заменив естественно "supermodule" на название модуля. Работа в блоке и в аргументах не гарантируется
Мда, я думал это можно реализовать проще) Еще денек подожду ответов, так все еще не покидает надежда решения в два клика, ну а дальше экспериментировать.
Помониторил форум друпал.орг, проблема возникает у многих, но решения вроде как нет. Единственное, что советуют - использовать адрес страницы вьюс, отличающейся от адресов нод, чтобы хоть как-то минимизировать количество дублей. Т.е. в моем случае при адресе ноды category/razdel1/voc/title-node сделать адрес страницы, выводящей список нод, не category/razdel1/, а, например, category/razdel/list.
Ссылка на один из топиков http://drupal.org/node/392106
Пример на друпал.ру - http://www.drupal.ru/online как я понял, выводится через вьюс, если добавить к этому урлу, например, /jfsdlkfjs, то мы получим не 404, а 200 и дубль страницы.
С этим до сих пор не разобрался. Писать свой модуль или хакать ядро, как советовали выше, никакого желания нет. Чуток перефразирую вопрос - как сделать так, чтобы по ссылке taxonomy/term/№ или по ее алиасу отдавался 404-ый ответ сервера, а не выводился список нод, принадлежащих этому термину.
ОМГ. Вам сложно вставить три строки в файл, зато не влом шерстить друпал.орг
Словарей и терминов много, переписывать в if десятки всевозможных агрументов не хочется.
Дык, substr ещё никто не отменял
Нашел такой способ - в файле taxonomy.module модуля taxonomy есть функция taxonomy_menu(), если закомментировать
'title' => 'Taxonomy term',
'page callback' => 'taxonomy_term_page',
'page arguments' => array(2),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
'file' => 'taxonomy.pages.inc',
);
то все работает так, как мне и нужно. Т.е. при обращении ко всем страницам taxonomy/term/% или же их алиасам, сервер выдает 404 ошибку. Чем мне не нравится этот метод - хакается ядро. Хочется что-нибудь переопределить в файле template.php, но насколько я помню, переопределять можно только функции, начинающиеся с theme_. Нашел еще такую функцию в node.module
return theme('item_list', $items, $title);
}
Но ее изменение ни к чему не приводит.
Проблема с дублями страниц, порождаемыми модулем Views, решена.
Нужно всего лишь установить модуль views 404.
Советую поставить этот модуль всем, а не полагаться на сообразительность поисковиков. Как видно из стартового поста, проблема у меня с дублями возникла после смены структуры сайта - с тех пор прошел год (как время бежит...), а в индексе Яндекса до сих пор сотни дублей и разного мусора.