Скрытие полного отображения узла и URL-адреса
Это очень похоже на Как скрыть узлы, к которым не следует обращаться напрямую от пользователей и поисковых систем?
Я хотел бы:
- Не имеют прямого доступа к определенным узлам по полному URL-адресу (т.Е. в узле/1234 или его псевдониме), так как они используются в представлении
- Убедитесь, что они не индексируются в поисковых системах
Мои вопросы таковы:
- Имеет ли маркировка узла как "неопубликованного" какую-либо сторону эффекты? кроме просмотра узла (при условии, что вы администратор) и просмотра узла как неопубликованного
- Пометка узла как опубликованного дает 401, когда его просматривают (по полному URL-адресу) анонимные пользователи. Страница все еще просматривается? Есть ли способ перенаправить 401 и не пострадать с точки зрения SEO?
РЕДАКТИРОВАТЬ: Использование Drupal 7.
Спасибо!
5 answers
Не публикация узла означает, что у вас не может быть незавершенных работ, или вам нужен другой способ пометить их как не готовые для веб-сайта. Я вижу в этом определенный недостаток.
Вы имеете в виду 403 или 404 вместо 401? Если страница приведет к 404, то она не будет сканироваться или индексироваться. У Google нет способа отличить случай "невидимого узла" от простого старого плохого URL-адреса. 401 должно происходить только в случае авторизации. 403 может привести к тому, что страница будет обновлена позже дата. Вы никогда не захотите перенаправлять с одного из них, так как для этого требуется 301 или 302.
Для другого способа сделать это в устаревшем проекте вы можете задать псевдоним пути
no-view/[nid]
, А затем используйте
function MYMODULE_init ()
{
$path = drupal_get_path_alias(request_uri());
if (strpos($path, "no-view/") !== false) {
drupal_not_found();
exit;
}
}
В пользовательском модуле. Вы можете подключить аналогичную функциональность через API узла, если хотите избежать добавления функции hook_init().
Двигаться вперед, используя сущности, предложенные @nicoz, - лучшая идея.
Одним из самых больших изменений на уровне архитектуры Drupal 7 является введение сущностей в качестве абстракции для контента. Старые времена попыток втиснуть все в узлы закончились. Короче говоря, вы получаете все удобства узлов без накладных расходов и ненужного кода (и в вашем случае архитектурную проблему "сокрытия" узлов от пользователей, искателей).
Drupal Commerce использует их для продуктов. Это позволяет самим продуктам быть недоступными для конечных пользователей пользователи, но прикрепленные к продукту, отображаются и отображаются для просмотра и покупки конечным пользователем.
Используйте сущность Конструкторский комплект (ECK). Это даст вам приятный пользовательский интерфейс для создания ваших сущностей, а затем просто используйте представления для их отображения конечному пользователю.
Модуль Внутренних узлов должен делать именно то, что вы хотите, хотя я сам его не тестировал.
Моя единственная проблема в том, что вы не можете редактировать скрываемые узлы, но над этим ведется работа ( Разрешить пользователям редактировать/удалять узлы, которые они не могут просматривать)
Если вы нигде на своем сайте не ссылаетесь на эти узлы, то поисковые системы даже не должны их находить.
Более надежным подходом было бы Предложение Бердира использовать hook_node_access.
Модуль Кроличья нора отлично подходит для этого, вы можете скрыть доступные узлы или перенаправить их на другую целевую страницу один раз. Вы можете выбрать роли "администратора", чтобы получить к ним обычный доступ, а все остальные подчиняются этому общему правилу для каждого типа контента, но также изменяйте это на основе узла за узлом.