Як приховати вузли, до яких не можна отримати прямий доступ від користувачів та пошукових систем?


51

Я виявив, що є час, коли у мене є вузол, який просто містить вміст, який відображатиметься десь в іншому місці, але його не слід переглядати безпосередньо. Тобто, ніхто ніколи не повинен переходити до node / 1234, але вміст у вузлі 1234 повинен відображатися десь в іншому місці. Наприклад, я створюю інформацію про сторінку з вмістом на вкладках, використовуючи представлення. Так є сторінки "Про мене", "Про нас" та "Про них". Усі вони відображаються на одній сторінці з вкладками, використовуючи Перегляд. Тому я не хочу, щоб люди потрапляли безпосередньо до вузла "Про нас", оскільки тоді вони не побачили б вкладки для інших сторінок. У той же час, я не хочу, щоб Google надав людям пряме посилання на цей вузол, я хочу обмежити доступ, щоб користувачі могли дістатися до нього лише через Перегляд (тобто вкладку).

Тому мені потрібно обмежити доступ до вузла, видалити його з результатів пошуку в Drupal і переконатися, що Google не підбирає його. Будь-які пропозиції?


Зараз я використовую drupal 6, але якщо це різниться між 6 та 7, я думаю, було б корисно відповісти на обидва
Chaulky

Якщо вас турбує лише кілька вузлів, чому б не додати їх у файл robots.txt, щоб виключити їх із пошуку Google?
Тангурена

Це поширене оману. robots.txt не заважає пошуковим системам індексувати ваш сайт, він заважає пошуковим системам сканувати ваш сайт. Якщо хтось посилається на сторінку на вашому веб-сайті, Google перейде за посиланням та індексує сторінку, якщо хоче. Якщо ви хочете запобігти індексації, вам потрібно використовувати метатег ROBOTS, тобто: <meta name = "ROBOTS" value = "NOINDEX" />
René

Відповіді:


28

Мені це здається гарним випадком використання модуля "Панелі", оскільки ви можете створювати панелі, які замінять сторінки вузлів, і можуть встановлювати контекст для панелі таким чином, щоб користувачі гарантували, що сторінка ви хочете, щоб вони її бачили, а також правила доступу до сторінок панелей, якщо вони потрібні. Детальнішу інформацію див. У цій публікації


це виглядає, щоб робити саме те, що я хочу, і в чистому, простому вигляді ... навіть поставляється з підручником (приємне посилання) !!
Chaulky

Чи це не надмірність у порівнянні з рішенням модуля «Кроляча діра»? Чи є додаткові переваги цьому, що робить його обраною відповіддю?
Маріо Авад

1
@MarioAwad Ну, для одного модуля Кроляча діра навіть не існував до року, після того як я відповів на це питання. У той час Панелі були найкращим рішенням, я все ще думаю, що це найкраще рішення, якщо у когось вже встановлені панелі, якщо ні, то Кроляча отвір може бути кращим легким рішенням.
coderintherye

@nowarninglabel Звучить як гарна порада. Дякую. Можливо, ви повинні додати це пояснення до відповіді, щоб зробити його кращим для майбутніх бажаючих. Ура.
Маріо Авад

33

Модуль « Кроляча отвір» забезпечує цю функцію.

Кроляча діра - це модуль, який додає можливість контролювати те, що має відбуватися, коли суб'єкт господарювання переглядається на власній сторінці.

Можливо, у вас є тип вмісту, який ніколи не повинен відображатися на власній сторінці, як тип вмісту зображення, який відображається у каруселі. Кроляча дірка може запобігти доступ цього вузла на власній сторінці через вузол / ххх.


Зараз існує версія Drupal 6.
mpdonadio

Відмінне, чисте і просте рішення.
jamix

1
Приємно, що цей модуль краще, ніж модуль панелі (для цього випадку використання), якщо ви хочете лише перешкодити прямому доступу до вузла content_type, оскільки це робить тільки це!
Ларзан

13

Одним із варіантів може бути ніколи не публікувати вузол, але сторінка споживача ігнорувати їх статус публікації. Отже, у вашому прикладі, перегляд "Про" може просто ігнорувати стан публікації ваших вузлів "About-xxx". Оскільки вузли не публікуються, неавторизований користувач не може отримати доступ до них, і їх не слід індексувати пошуковою системою.

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

hook_menu_alter()може також використовуватися для зміни зворотного виклику доступу сторінок вузла, щоб заборонити доступ до прихованих вузлів.

Найкраще, мабуть, не базувати фільтрацію на жорстко закодованому ідентифікаторі вузла, а використовувати або власне поле на вузлі (за допомогою API CCK / Field або користувальницької таблиці), або список прихованих вузлів, що зберігаються у змінній .


@ mongolity404 приємний пост, хороша інформація. Дайте мені ідеї для кількох інших речей. Але навіщо вікі спільноти?
Chaulky

Я зробив свою вікі-спільноту для відповідей на випадок, коли хтось
захоче

7

Для Drupal 7 ця кроляча дірка надає цю особливість.

Кроляча діра - це модуль, який додає можливість контролювати те, що повинно відбуватися, коли суб'єкт господарювання переглядається на своїй власній сторінці.

Це працює, надаючи декілька варіантів для контролю того, що має відбуватися під час перегляду суб'єкта господарювання на його власній сторінці. Ви маєте можливість

  1. Надайте сторінку, заборонену в доступі.

  2. Доставити сторінку не знайдено.

  3. Випустіть переспрямування сторінки на будь-який шлях або зовнішню URL-адресу.

  4. Або просто відобразити сутність (регулярна поведінка).

Як :

Увімкніть підмодуль вузлів Rabbit Hole. Тоді ми отримаємо розділ конфігурації, пов’язаний із кожною формою у CODE Drupal


6

Вирішено. Спочатку я спробував відповісти П'єру Буйлу, але якщо ви скасуєте публікацію вузла, доступ до нього не може бути доступний, і ці вузли стають марними. У моєму випадку у мене є батьківські та дочірні вузли, лише дочірні вузли (для цілей адміністратора) мають бути приховані та НЕ індексовані сканерами. Що я зробив це з менеджером сторінок, здійснив переспрямування URL-адреси (приховуючи ці вузли для всіх користувачів, крім адміністратора), з відповіддю http відповідно до цього навчального посібника від http://www.wunderkraut.com/ 1, а вузли без індексу сканерами обробляються від вузла модуля немає-індексу . Це буде спрацьовувати, навіть якщо у вас немає зв’язків між дітьми і дітьми. Посилання на підручник:


4

У Drupal 7 також повинно бути можливим використання kuk_node_access () , це звичайний гак в D7, який можуть бути реалізовані всіма модулями для всіх типів вузлів. Тоді ви можете заборонити доступ, якщо користувач намагається переглянути вузол на власному вузлі / nid.

Вам, ймовірно, також потрібно буде впровадити гак_query_node_access_alter () і додати там чек, щоб сховати вузол у результатах пошуку. Це навіть може бути достатньо самостійно, і вам не потрібен hoke_node_access (). І це може працювати навіть у D6, оскільки ви також можете змінити запит, але в D7 це набагато простіше через конструктора запитів.


3

Просто встановіть цей вузол як "неопублікований", потім у вікні додайте фільтр "опублікований вузол: ні".

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


3

Ви можете використовувати будь-яку систему доступу до вузла та використовувати view3. Там ви не можете відключити перезапис sql у налаштуваннях запиту, тому ви можете вимкнути систему доступу до вузла в цьому поданні.


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" } } ]
 }
}

2

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


2

Модуль Content Access ідеально відповідає вашим вимогам.

Цей модуль дозволяє керувати дозволами для типів вмісту за роллю та автором. Це дозволяє вказати власні перегляд, редагувати та видаляти дозволи для кожного типу вмісту. За бажанням можна включити налаштування доступу до вмісту, щоб ви могли налаштувати доступ для кожного контентного вузла.

Він також має гарну документацію, яка допоможе вам розпочати роботу.


2

Якщо ваш «включені зміст» вузли повинні залишатися недоступними, то заблокуйте / вузол / * на веб - сервер «місце = / вузол / *» рівня . За замовчуванням заборонено доступ до всіх / вузлів. За замовчуванням дозволяють доступ до вузлів, які отримали шлях авто-шляху, як / сторінки.

(Основний .htaccess пароль для підкаталогів - це гідний спосіб блокування випадкової індексації пошуку зовнішніми сканерами.)

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

Це для чого потрібні вузли.

Чи важлива для вас конфіденційність вашого "включеного вмісту"? Якщо так, то ...

  1. Все, що має URL-адресу, врешті-решт потрапить у Google.

    Тому що пошукові системи не покладаються тільки на павуків посилань. Вони також оцінюють зворотний зв'язок браузера тощо. Жоден робот.txt, або pathauto, globalredireire, модуль кролика не допоможе вам спокійно спати. Якщо до вузла можна отримати доступ, він буде індексований. Можливо, через ваш власний браузер / аддони.

  2. Подумайте, чи "вміст, який має бути включений", дійсно повинен бути вузлом , якщо ніхто не має доступу до нього як сторінки ?

    Якщо ваш "включений вміст" буде зберігатися на міні-панелі / блоці / фрагменті / бобі / ..., ви ризикуєте, що він коли-небудь перелічиться, або коли-небудь з'явиться як сторінка з автоматичною URL-адресою ще не знаю про це . (сторінки огляду таксономії, пошук, перегляди ...)


0

Обмежити Node Page View модуль робить саме те , що ви хочете.

З опису модуля:

Ви коли-небудь використовували нодетип слайд-шоу, який потрібно опублікувати, але не хочете, щоб вузол був доступний сам по собі, використовуючи шлях до вузла / XXX? Цей модуль для вас!

За допомогою цього модуля ви можете обмежити доступ до fullрежиму перегляду вузла , тому ви не можете отримати доступ до вузла node/XXX.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.