Как скрыть узлы, к которым нельзя напрямую обращаться от пользователей и поисковых систем?

Я обнаружил, что есть моменты, когда у меня есть узел, который просто содержит контент, который будет отображаться где-то в другом месте, но не должен рассматриваться напрямую. То есть никто никогда не должен переходить к узлу /1234, но содержимое в узле 1234 должно отображаться где-то еще. Например, я создаю страницу с вкладкой с использованием представлений. Таким образом, есть страницы «Обо мне», «О нас» и «О них». Все они отображаются на одной странице с вкладками с помощью Views. Поэтому я не хочу, чтобы люди напрямую попадали на узел «О нас», потому что тогда они не увидели вкладки для других страниц. В то же время я не хочу, чтобы Google предоставлял людям прямую ссылку на этот узел, я хочу ограничить доступ, чтобы пользователи могли получить доступ к нему через View (т. Е. Вкладку).

Поэтому мне нужно ограничить доступ к узлу, удалить его из результатов поиска Drupal и убедиться, что Google не забирает его. Любые предложения?

52 голоса | спросил Chaulky 4 MaramFri, 04 Mar 2011 08:17:32 +03002011-03-04T08:17:32+03:0008 2011, 08:17:32

13 ответов


28

Это звучит для меня как хороший вариант для модуля панелей , потому что вы можете создавать панели, которые будут переопределять страницы узлов, и может установить контекст для панели таким образом, чтобы гарантировать, что пользователи видят страницу, которую вы хотите, чтобы увидеть ее, а также правила доступа к страницам панели, если они вам понадобятся. Для получения дополнительной информации см. этот пост на d.o.

ответил coderintherye 4 MaramFri, 04 Mar 2011 10:20:19 +03002011-03-04T10:20:19+03:0010 2011, 10:20:19
33

Модуль Rabbit Hole предоставляет эту функцию.

  

Rabbit Hole - это модуль, который добавляет возможность контролировать, что должно произойти, когда объект просматривается на своей собственной странице.

     

Возможно, у вас есть тип контента, который никогда не должен отображаться на его собственной странице, например тип содержимого изображения, отображаемый в карусели. Rabbit Hole может помешать этому узлу быть доступным на своей собственной странице через node /xxx.

ответил Pierre Buyle 5 MarpmMon, 05 Mar 2012 21:39:41 +04002012-03-05T21:39:41+04:0009 2012, 21:39:41
13

Один из вариантов может заключаться в том, чтобы никогда не публиковать узел, но иметь потребительскую страницу игнорировать их статус публикации. Поэтому в вашем примере ваше представление «О программе» может просто игнорировать статус публикации ваших «Окс-ххх» узлов. Поскольку узлы не публикуются, неавторизованный пользователь не может получить к ним доступ, и они не должны индексироваться поисковой системой.

Другим решением является использование hook_nodeapi('view') / hook_node_view() для выпуска drupal_goto() или drupal_access_denied() , когда страница узла посещает неавторизованный пользователь. Имейте в виду, что hook_nodeapi() / hook_node_view() используются во многих случаях, а не только при просмотре страницы узла.

hook_menu_alter() также можно использовать для изменения обратного вызова доступа на страницах узла, чтобы запретить доступ к узлам hidden .

Лучше всего, вероятно, не основывать фильтрацию на жестко закодированном идентификаторе узла, а использовать либо настраиваемое поле на узле (используя CCK /Field API, либо пользовательскую таблицу), либо список hidden узлы хранятся в переменной .

ответил Pierre Buyle 5 MarpmMon, 05 Mar 2012 21:39:41 +04002012-03-05T21:39:41+04:0009 2012, 21:39:41
7

Для Drupal 7, Rabbit Hole предоставляет эту функцию.

  

Rabbit Hole - это модуль, который добавляет способность контролировать то, что должно   происходят, когда en entity просматривается на своей собственной странице.

     

Это работает, предоставляя несколько опций для контроля того, что должно произойти   когда объект просматривается на своей странице. У вас есть способность   к

     
  1. Предоставьте страницу с запретом доступа.

  2.   
  3. Предоставьте страницу, не найденную на странице.

  4.   
  5. Выполните перенаправление страницы на любой путь или внешний URL.

  6.   
  7. Или просто отобразить объект (регулярное поведение).

  8.   

Как сделать:

Включить Подводные узлы кролика . Затем мы получим раздел конфигурации, связанный с каждой формой в Drupal CODE

ответил niksmac 25 MaramMon, 25 Mar 2013 08:56:02 +04002013-03-25T08:56:02+04:0008 2013, 08:56:02
5

решаемая. Сначала я попробовал ответить Pierre Buyle, но если вы отмените публикацию узла, он не сможет получить доступ к службе и эти узлы станут бесполезными. В моем случае у меня есть родительский и дочерний узлы, только дочерние узлы (для целей администратора) - это те, которые должны быть скрыты и НЕ индексироваться сканерами. То, что я сделал с помощью диспетчера страниц, сделало перенаправление URL (скрыть эти узлы ко всем пользователям, кроме администратора) с помощью HTTP-ответа в соответствии с этим tuturial на http://www.wunderkraut.com/ 1 , а узлы без индексов с помощью искателей обрабатываются модуль индекса узла без индекса . Это будет работать, даже если у вас нет отношения к узлу paret-child.   Ссылка на учебник:

ответил pinueve 26 +03002015-10-26T21:45:54+03:00312015bEurope/MoscowMon, 26 Oct 2015 21:45:54 +0300 2015, 21:45:54
4

В Drupal 7 также можно использовать hook_node_access () , это обычный крючок в D7, который может быть реализован всеми модулями для всех типов узлов. Затем вы можете запретить доступ, если пользователь пытается просмотреть узел на своем собственном узле /nid.

Вероятно, вам также нужно реализовать hook_query_node_access_alter () и добавить туда чек, чтобы скрыть узел в результатах поиска. Этого может быть достаточно даже на самом деле, и вам не нужен hook_node_access (). И это может даже работать в D6, потому что вы можете также изменить запрос там, но это намного проще в D7 из-за построителя запросов.

ответил Berdir 4 MarpmFri, 04 Mar 2011 13:18:12 +03002011-03-04T13:18:12+03:0001 2011, 13:18:12
3

Просто установите эти узлы как «неопубликованные», затем в представлении добавьте опубликованный узел фильтра: no.

Как следует из примечания seo, хорошей практикой является создание настраиваемого типа контента для этих «призракных» узлов и указание pathauto дать им определенные URL-адреса (я использую /dev/null/[title-raw];): даже если узел не опубликован, он будет иметь свой собственный псевдоним url, поэтому в вашем примере, если вы сначала создадите узел-призрак «о нас», а затем страницу просмотра «о нас», второй URL-адрес будет be example.com/about-us-0 becose example.com/about-us был взят из призрачного (однако вы можете установить пути вручную)

ответил Strae 4 MarpmFri, 04 Mar 2011 13:27:58 +03002011-03-04T13:27:58+03:0001 2011, 13:27:58
3

Вы можете использовать любую систему доступа к узлам и использовать views3. Там вы не можете отключить sql rewrite в настройках запроса, и поэтому вы можете отключить систему доступа к узлу в этом представлении.

ответил Daniel Wehner 6 MarpmSun, 06 Mar 2011 12:17:36 +03002011-03-06T12:17:36+03:0012 2011, 12:17:36
3

Вы можете сделать это с помощью модулей правил.
+ Создать новое правило с событием «Просмотр содержимого».
+ Добавьте пару условий, например: У пользователя есть роли: анонимный, Путь имеет псевдоним URL: node /xyz (это узел, который вы хотите ограничить для анонимного пользователя). Помните, добавьте условие «и» или «или», если это необходимо.
+ Создать действие для перенаправления на другую страницу или сделать что-то еще.  Это пример кода, который я экспортировал для вас

{ "rules_limit_viewing_some_nodes" : {
  "LABEL" : "Limit viewing some nodes",
  "PLUGIN" : "reaction rule",
  "REQUIRES" : [ "rules", "path" ],
  "ON" : [ "node_view" ],
  "IF" : [
     { "user_has_role" : {
       "account" : [ "site:current-user" ],
       "roles" : { "value" : { "1" : "1" } }
      }
     },
     { "AND" : [] },
     { "path_has_alias" : { "source" : "node\/28" } }
   ],
   "DO" : [ { "redirect" : { "url" : "error" } } ]
 }
}
ответил Stone Vo 25 MaramMon, 25 Mar 2013 08:32:36 +04002013-03-25T08:32:36+04:0008 2013, 08:32:36
2

Я думаю, что самый простой способ выполнить то, что вы хотите, - использовать диспетчер страниц (Ctools), действительно прост в использовании, все, что вам нужно сделать, - указать, какой узел перенаправить туда (в данном случае от одного узла до другой)

ответил Nicolas_ii 30 Jpm1000000pmMon, 30 Jan 2012 17:56:45 +040012 2012, 17:56:45
2

Попробуйте модуль доступа к содержимому .

  

позволяет управлять разрешениями для типов контента по ролям и автору.   Это позволяет вам определять пользовательские виды просмотра, редактирования и удаления разрешений для   каждый тип контента. При желании вы можете включить доступ к контенту   , поэтому вы можете настроить доступ для каждого узла контента.

ответил monymirza 25 MaramMon, 25 Mar 2013 08:44:36 +04002013-03-25T08:44:36+04:0008 2013, 08:44:36
2

Модуль Content Access полностью удовлетворит ваши требования.

  

Этот модуль позволяет вам управлять разрешениями для типов контента по ролям и автору. Он позволяет вам указать пользовательские виды просмотра, редактирования и удаления разрешений для каждого типа контента. При желании вы можете включить настройки доступа к содержимому, чтобы вы могли настроить доступ для каждого узла контента.

Он также имеет хорошую документацию , чтобы помочь вам начать работу.

ответил AjitS 25 MaramMon, 25 Mar 2013 08:45:40 +04002013-03-25T08:45:40+04:0008 2013, 08:45:40
2

Если ваши узлы «включенного контента» должны оставаться недоступными, рассмотрите блокировку /узел /* на веб-сервере "location = /node /*" уровень . По умолчанию запрещается доступ ко всем /узлам. По умолчанию разрешается доступ к узлам, которые получили путь авто-пути, например /pages.

(Основной пароль .htaccess для подкаталогов - это достойный способ блокировать случайную индексацию поиска внешними искателями тоже.)

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

Это то, для чего нужны узлы.

Насколько важна конфиденциальность вашего «включенного контента»? Если да, то ...

  1. Все, что имеет URL-адрес, в конечном итоге пострадает от google.

    Потому что поисковые системы не полагаются только на пауков. Oни также оценивать отзывы обозревателя и т. д. Нет robot.txt или pathauto, globalradirect, модуль раббитола поможет вам спать спокойно. Если к узлу можно получить доступ, тогда он будет проиндексирован. Может быть, браузер /аддонов.

  2. Пересмотреть, если «контент, который должен быть включен», действительно должен быть узлом , , если никто не должен обращаться к нему как странице ?

    Если ваш «включенный контент» будет храниться в мини-панели /блоке /фрагменте /bean /..., тогда вы подвергаетесь значительно меньшему риску того, что он когда-либо будет указан или когда-либо появится в виде страницы с автоматическим URL, который вы не знаете о . (страницы обзора таксономии, поиск, мнения ...)

ответил user18099 16 MonEurope/Moscow2013-12-16T20:06:22+04:00Europe/Moscow12bEurope/MoscowMon, 16 Dec 2013 20:06:22 +0400 2013, 20:06:22

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132