Jak ukryć węzły, do których użytkownicy i wyszukiwarki nie powinni mieć bezpośredniego dostępu?

51

Odkryłem, że czasami mam węzeł, który po prostu zawiera treści, które będą wyświetlane gdzie indziej, ale nie powinny być przeglądane bezpośrednio. Oznacza to, że nikt nigdy nie powinien przechodzić do węzła / 1234, ale treść w węźle 1234 powinna być wyświetlana gdzie indziej. Na przykład tworzę stronę o treści z kartami za pomocą widoków. Są więc strony „O mnie”, „O nas” i „O nich”. Wszystkie są wyświetlane na jednej stronie z kartami z widokami. Nie chcę więc, aby ludzie przechodzili bezpośrednio do węzła „O nas”, ponieważ wtedy nie widzieliby kart dla innych stron. Jednocześnie nie chcę, aby Google dawał ludziom bezpośredni link do tego węzła, chcę ograniczyć dostęp, aby użytkownicy mogli uzyskać do niego dostęp tylko poprzez Widok (tj. Kartę).

Muszę więc ograniczyć dostęp do węzła, usunąć go z wyników wyszukiwania Drupal i upewnić się, że Google go nie odbierze. Jakieś sugestie?

Chaulky
źródło
Obecnie używam drupala 6, ale jeśli różni się między 6 a 7, myślę, że przydałaby się odpowiedź na oba
Chaulky
Jeśli martwisz się tylko kilkoma węzłami, dlaczego nie dodać ich do pliku robots.txt , aby wykluczyć je z wyszukiwania Google?
Tangurena,
Jest to powszechne nieporozumienie. robots.txt nie zapobiega wyszukiwarek do indeksu witryny, zapobiega wyszukiwarkom indeksowanie witryny. Jeśli ktoś prowadzi do strony w Twojej witrynie, Google będzie podążać za linkiem i indeksować stronę, jeśli chce. Jeśli chcesz zapobiec indeksowaniu , musisz użyć metatagu ROBOTS, tj .: <nazwa meta = „ROBOTS” wartość = „NOINDEX” />
René

Odpowiedzi:

28

Wydaje mi się, że to dobry przypadek użycia modułu Panele, ponieważ możesz tworzyć panele, które będą zastępować strony węzłów, i możesz ustawić kontekst panelu tak, aby użytkownicy mogli zobaczyć stronę, którą chcesz, aby ją zobaczyli, a także reguły dostępu do stron panelu, jeśli ich potrzebujesz. Aby uzyskać więcej informacji, zobacz ten post na do

coderintherye
źródło
wygląda na to, że zrobię dokładnie to, co chcę, i w czysty, prosty sposób ... nawet zawiera samouczek (fajny link) !!
Chaulky,
Czy nie jest to przesada w porównaniu z rozwiązaniem modułowym Rabbit Hole? Czy są z tego dodatkowe korzyści, które sprawiają, że jest to wybrana odpowiedź?
Mario Awad
1
@MarioAwad Cóż, dla jednego moduł Rabbit Hole nie istniał aż do ponad roku po tym, jak odpowiedziałem na to pytanie. W tamtym czasie panele były najlepszym rozwiązaniem, nadal uważam, że to najlepsze rozwiązanie, jeśli ktoś już ma zainstalowane panele, jeśli nie, to Rabbit Hole może być lepszym lekkim rozwiązaniem.
coderintherye
@nowarninglabel Brzmi jak dobra wskazówka. Dzięki. Może powinieneś dodać to wyjaśnienie do odpowiedzi, aby było lepiej dla przyszłych graczy. Twoje zdrowie.
Mario Awad,
33

Moduł Rabbit Hole zapewnia tę funkcję.

Rabbit Hole to moduł, który dodaje możliwość kontrolowania, co powinno się zdarzyć, gdy byt jest oglądany na własnej stronie.

Być może masz typ zawartości, który nigdy nie powinien być wyświetlany na własnej stronie, na przykład typ zawartości obrazu wyświetlany w karuzeli. Rabbit Hole może uniemożliwić dostęp do tego węzła na jego własnej stronie za pośrednictwem węzła / xxx.

Pierre Buyle
źródło
Jest teraz wersja Drupal 6.
mpdonadio
Doskonałe, czyste i proste rozwiązanie.
jamix
1
Fajnie, ten jest lepszy niż moduł panelu (w tym przypadku użycia), jeśli chcesz tylko uniemożliwić bezpośredni dostęp do węzła content_type, ponieważ robi to tylko!
Larzan
13

Jedną z opcji może być nigdy nie publikowanie węzła, ale strona konsumenta ignoruje jego stan publikacji. Tak więc w twoim przykładzie widok „Informacje” może po prostu zignorować stan publikacji węzłów „About-xxx”. Ponieważ węzły nie są publikowane, nieautoryzowany użytkownik nie może uzyskać do nich dostępu i nie powinien być indeksowany przez wyszukiwarkę.

Innym rozwiązaniem jest użycie implementacji hook_nodeapi('view')/ hook_node_view()do wydania a drupal_goto()lub drupal_access_denied()gdy strona węzła jest odwiedzana przez nieautoryzowanego użytkownika. Pamiętaj, że hook_nodeapi()/ hook_node_view()są używane w wielu przypadkach i nie tylko podczas przeglądania strony węzła.

hook_menu_alter()może być również użyty do zmiany wywołania zwrotnego dostępu stron węzłów, aby odmówić dostępu do ukrytych węzłów.

Najlepiej chyba nie opierać filtrowania na zakodowanym na stałe identyfikatorze węzła, ale użyć albo niestandardowego pola w węźle (używając CCK / Field API lub niestandardowej tabeli), albo listy ukrytych węzłów przechowywanych w zmiennej .

Pierre Buyle
źródło
@ mongolity404 ładny post, dobra informacja. Dał mi pomysły na kilka innych rzeczy. Ale dlaczego wiki społeczności?
Chaulky,
Stworzyłem odpowiedź wiki społeczności na wypadek, gdyby ktoś
chciał podać
7

W Drupal 7 Dziura Królika zapewnia tę funkcję.

Rabbit Hole to moduł, który dodaje możliwość kontrolowania, co powinno się zdarzyć, gdy encja jest wyświetlana na własnej stronie.

Działa to poprzez zapewnienie wielu opcji kontrolujących, co powinno się stać, gdy jednostka jest wyświetlana na własnej stronie. Masz możliwość

  1. Dostarcz stronę, do której odmówiono dostępu.

  2. Dostarcz stronę, której nie znaleziono.

  3. Wydaj przekierowanie strony do dowolnej ścieżki lub zewnętrznego adresu URL.

  4. Lub po prostu wyświetlaj byt (zwykłe zachowanie).

Jak :

Włącz Rabbit Hole węzłów submodule Wtedy będziemy się sekcja config związanego z każdej postaci w Drupal KOD

niksmac
źródło
6

Rozwiązany. Najpierw próbowałem odpowiedzi Pierre Buyle, ale jeśli cofniesz publikację węzła, nie będzie można uzyskać do niego dostępu, a węzły staną się bezużyteczne. W moim przypadku mam węzły nadrzędne i podrzędne, tylko węzły podrzędne (do celów administracyjnych) są tymi, które mają być ukryte i NIE mogą być indeksowane przez roboty. To, co zrobiłem z menedżerem stron, spowodowało przekierowanie adresu URL (ukrywając te węzły przed wszystkimi użytkownikami oprócz administratora) z odpowiedzią http zgodnie z tym tuturialem przez http://www.wunderkraut.com/ 1 i nie było indeksowanych węzłów przez roboty. przez moduł bezindeksowy węzła . To zadziała, nawet jeśli nie masz relacji węzła paret-dziecko. Link do samouczka:

pinueve
źródło
4

W Drupal 7 powinno być również możliwe użycie hook_node_access () , jest to normalny hook w D7, który może być zaimplementowany przez wszystkie moduły dla wszystkich typów węzłów. Następnie możesz odmówić dostępu, jeśli użytkownik próbuje wyświetlić węzeł we własnym węźle / nid.

Prawdopodobnie musisz także zaimplementować hook_query_node_access_alter () i dodać tam zaznaczenie, aby ukryć węzeł w wynikach wyszukiwania. To może nawet wystarczyć i nie potrzebujesz hook_node_access (). I może nawet działać w D6, ponieważ można tam również zmienić zapytanie, ale w D7 jest to znacznie łatwiejsze z powodu konstruktora zapytań.

Berdir
źródło
3

Po prostu ustaw węzeł jako „niepublikowany”, a następnie w widoku dodaj filtr „opublikowany węzeł: nie”.

Jak zauważa SEO, dobrą praktyką jest tworzenie niestandardowego typu zawartości dla tych „duchowych” węzłów i mówienie pathauto, aby podało im określone adresy URL (używam /dev/null/[title-raw];): nawet jeśli węzeł nie zostanie opublikowany, będzie miał własny alias adresu URL, tak w swojej przykład jeśli utworzyć pierwszy węzeł ducha „o nas”, a następnie Zobacz stronę „o nas”, url drugim będzie example.com/about-us-0becose example.com/about-uszostało zaczerpnięte z jednego ducha (jednakże, można ręcznie ustawić ścieżki)

Strae
źródło
3

Możesz użyć dowolnego systemu dostępu do węzłów i korzystać z widoków3. Tam nie można wyłączyć przepisywania sql w ustawieniach zapytania, a więc można wyłączyć system dostępu do węzła w tym widoku.

Daniel Wehner
źródło
3

Możesz to zrobić za pomocą modułów reguł.
+ Utwórz nową regułę ze zdarzeniem „Treść jest wyświetlana”.
+ Dodaj kilka warunków, na przykład: Użytkownik ma role: anonimowy, Ścieżka ma alias URL: node / xyz (jest to węzeł, który chcesz ograniczyć dla anonimowego użytkownika). Pamiętaj, aby dodać warunek „i” lub „lub”, jeśli jest to konieczne.
+ Utwórz akcję przekierowania na inną stronę lub zrób coś innego. To jest przykładowy kod, który dla ciebie wyeksportowałem

{ "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
źródło
2

Myślę, że najłatwiejszym sposobem na osiągnięcie tego, co chcesz, jest użycie Menedżera stron (Ctools), jest naprawdę prosty w użyciu, wszystko co musisz zrobić, to określić, który węzeł ma przekierowywać (w tym przypadku z jednego węzła do drugiego)

Nicolas_ii
źródło
2

Moduł Content Access idealnie spełni twoje wymagania.

Ten moduł umożliwia zarządzanie uprawnieniami do typów treści według roli i autora. Pozwala określić niestandardowe uprawnienia do wyświetlania, edycji i usuwania dla każdego typu zawartości. Opcjonalnie możesz włączyć ustawienia dostępu do zawartości, aby dostosować dostęp do każdego węzła treści.

Ma również dobrą dokumentację, która pomoże Ci zacząć.

AjitS
źródło
2

Jeśli twój „włączone” content węzły muszą pozostać niedostępne, a następnie rozważyć blokowanie / node / * na serwer WWW „location = / * / node” poziomu . Domyślnie odmawia dostępu do wszystkich / węzłów. Domyślnie zezwala na dostęp do węzłów, które otrzymały ścieżkę auto-ścieżki, taką jak / pages.

(Podstawowe hasło .htaccess do podkatalogów to dobry sposób na blokowanie przypadkowego indeksowania wyszukiwania również przez zewnętrzne roboty).

Nigdy nie możesz zagwarantować, że węzeł nie będzie dostępny za pośrednictwem modułu, który zostanie zainstalowany w przyszłości, lub takiego, którego jeszcze nie rozumiesz. (Wyniki wyszukiwania, wykazy, widoki domyślne, przegląd kategorii systematyki ...)

Po to są węzły.

Czy prywatność „dołączonych treści” jest dla Ciebie ważna? Jeśli tak, to ...

  1. Wszystko, co ma adres URL, ostatecznie zostanie trafione przez Google.

    Ponieważ wyszukiwarki nie polegają wyłącznie na pająkach linków. Oceniają także opinie przeglądarki itp. Brak pliku robot.txt lub pathauto, globalredirect, rabbithole pomoże ci spać spokojnie. Jeśli można uzyskać dostęp do węzła, zostanie on zindeksowany. Może przez własną przeglądarkę / dodatki.

  2. Zastanów się, czy „treść, która ma być zawarta” powinna naprawdę być węzłem , czy nikt nie powinien mieć do niej dostępu jako strony ?

    Jeśli Twoja „zawarta treść” byłaby przechowywana w mini-panelu / bloku / snippet / bean / ..., istnieje o wiele mniejsze ryzyko, że kiedykolwiek pojawi się na liście lub pojawi się jako strona z automatycznym adresem URL jeszcze nie wiem . (strony przeglądu taksonomii, wyszukiwanie, widoki ...)

użytkownik18099
źródło
0

Moduł Ogranicz widok strony węzła robi dokładnie to, co chcesz.

Z opisu modułu:

Czy używałeś kiedyś typu węzła pokazu slajdów, który musisz opublikować, ale nie chcesz, aby węzeł był dostępny sam, używając ścieżki węzła / XXX? Ten moduł jest dla Ciebie!

Za pomocą tego modułu możesz ograniczyć dostęp do fulltrybu widoku węzła , więc nie możesz uzyskać dostępu do węzła node/XXX.

Jdrupal
źródło