Wie verstecke ich Knoten, auf die Benutzer und Suchmaschinen keinen direkten Zugriff haben sollen?

51

Ich habe festgestellt, dass es Zeiten gibt, in denen ich einen Knoten habe, der lediglich Inhalte enthält, die an einer anderen Stelle angezeigt werden, aber nicht direkt angezeigt werden sollten. Das heißt, niemand sollte jemals zu Knoten / 1234 gehen, aber der Inhalt in Knoten 1234 sollte an einer anderen Stelle angezeigt werden. Ich erstelle beispielsweise eine About-Seite mit Registerkarteninhalten mithilfe von Ansichten. Es gibt also die Seiten "Über mich", "Über uns" und "Über sie". All dies wird auf einer einzigen Seite mit Registerkarten unter Verwendung von Ansichten angezeigt. Daher möchte ich nicht, dass Benutzer direkt zum Knoten "Über uns" gelangen, da sie dann die Registerkarten für die anderen Seiten nicht sehen. Gleichzeitig möchte ich nicht, dass Google den Nutzern einen direkten Link zu diesem Knoten gibt. Ich möchte den Zugriff einschränken, damit Nutzer nur über die Ansicht (dh den Tab) darauf zugreifen können.

Daher muss ich den Zugriff auf den Knoten einschränken, ihn aus den Drupal-Suchergebnissen entfernen und sicherstellen, dass Google ihn nicht erkennt. Irgendwelche Vorschläge?

Chaulky
quelle
Ich verwende derzeit Drupal 6, aber wenn es zwischen 6 und 7 liegt, wäre es meiner Meinung nach nützlich, für beide zu antworten
Chaulky
Wenn Sie sich nur um einige wenige Knoten Sorgen machen, können Sie diese dann zur robots.txt- Datei hinzufügen , um sie von der Google-Suche auszuschließen.
Tangurena
Dies ist ein weit verbreitetes Missverständnis. robots.txt verhindert nicht, dass Suchmaschinen Ihre Website indizieren , sondern dass Suchmaschinen Ihre Website crawlen . Wenn jemand auf eine Seite Ihrer Website verweist, folgt Google dem Link und indiziert die Seite, wenn dies gewünscht wird. Wenn Sie die Indizierung verhindern möchten, müssen Sie das ROBOTS-Meta-Tag verwenden, dh: <meta name = "ROBOTS" value = "NOINDEX" />
René

Antworten:

28

Dies scheint mir ein guter Anwendungsfall für das Modul "Panels" zu sein, da Sie Panels erstellen können, die Knotenseiten überschreiben, und den Kontext für das Panel so festlegen können, dass die Benutzer die Seite sehen, die sie sehen möchten Zugriffsregeln für Bedienfeldseiten, wenn Sie sie benötigen. Weitere Details finden Sie in diesem Beitrag auf do

coderintherye
quelle
dies scheint genau das zu tun, was ich will, und auf eine saubere, einfache Weise ... kommt sogar mit einem Tutorial (netter Link) !!
Chaulky
Ist das nicht ein Overkill im Vergleich zur Rabbit Hole-Modullösung? Gibt es zusätzliche Vorteile, die es zur gewählten Antwort machen?
Mario Awad
1
@MarioAwad Nun, zum einen gab es das Rabbit Hole-Modul erst über ein Jahr, nachdem ich diese Frage beantwortet hatte. Zu der Zeit war Panels die beste Lösung. Ich denke immer noch, dass es die beste Lösung ist, wenn bereits Panels installiert sind. Andernfalls ist Rabbit Hole möglicherweise eine leichtere Lösung.
coderintherye
@nowarninglabel Klingt nach einem guten Tipp. Vielen Dank. Vielleicht sollten Sie diese Klarstellung zur Antwort hinzufügen, um sie für zukünftige Ankömmlinge zu verbessern. Prost.
Mario Awad
33

Das Rabbit Hole- Modul bietet diese Funktion.

Rabbit Hole ist ein Modul, mit dem Sie steuern können, was passieren soll, wenn ein Objekt auf einer eigenen Seite angezeigt wird.

Vielleicht haben Sie einen Inhaltstyp, der niemals auf einer eigenen Seite angezeigt werden sollte, wie ein Bildinhaltstyp, der in einem Karussell angezeigt wird. Mit Rabbit Hole kann verhindert werden, dass dieser Knoten auf seiner eigenen Seite über node / xxx erreichbar ist.

Pierre Buyle
quelle
Es gibt jetzt eine Drupal 6-Version.
mpdonadio
Hervorragend, eine saubere und einfache Lösung.
Jamix
1
Nizza, dieser ist besser als das Panel-Modul (für diesen Anwendungsfall), wenn Sie nur den direkten Zugriff auf einen content_type-Knoten verhindern möchten, da dies nur der Fall ist!
Larzan,
13

Eine Option kann darin bestehen, den Knoten niemals zu veröffentlichen, die Verbraucherseite jedoch ihren Veröffentlichungsstatus ignorieren zu lassen. In Ihrem Beispiel ignoriert Ihre "About" -Ansicht möglicherweise nur den Veröffentlichungsstatus Ihrer "About-xxx" -Knoten. Da die Knoten nicht veröffentlicht werden, kann ein nicht autorisierter Benutzer nicht auf sie zugreifen und sie sollten von der Suchmaschine nicht indiziert werden.

Eine andere Lösung besteht darin, eine hook_nodeapi('view')/ hook_node_view()-Implementierung zu verwenden, um eine drupal_goto()oder drupal_access_denied()wenn die Knotenseite von einem nicht autorisierten Benutzer besucht wird. Beachten Sie, dass hook_nodeapi()/ hook_node_view()in vielen Fällen und nicht nur beim Anzeigen einer Knotenseite verwendet wird.

hook_menu_alter()kann auch verwendet werden, um den Zugriffsrückruf der Knotenseiten zu ändern und den Zugriff auf die versteckten Knoten zu verweigern .

Am besten ist es wahrscheinlich, die Filterung nicht auf der Grundlage einer fest codierten Knoten-ID durchzuführen, sondern entweder ein benutzerdefiniertes Feld auf dem Knoten (mithilfe der CCK / Field-API oder einer benutzerdefinierten Tabelle) oder eine Liste ausgeblendeter Knoten zu verwenden, die in einer Variablen gespeichert sind .

Pierre Buyle
quelle
@ mongolity404 schöner Beitrag, gute Infos. Gab mir Ideen für ein paar andere Dinge. Aber warum Community-Wiki?
Chaulky
Ich habe mein Antwort-Community-Wiki für den Fall erstellt, dass jemand Lust hat, ein Codebeispiel für die von mir vorgeschlagenen Optionen bereitzustellen ...
Pierre Buyle
7

Für Drupal 7 bietet das Rabbit Hole diese Funktion.

Rabbit Hole ist ein Modul, mit dem Sie steuern können, was passieren soll, wenn ein Objekt auf einer eigenen Seite angezeigt wird.

Dies funktioniert, indem mehrere Optionen bereitgestellt werden, um zu steuern, was passieren soll, wenn die Entität auf ihrer eigenen Seite angezeigt wird. Sie haben die Fähigkeit zu

  1. Stellen Sie eine Seite mit verweigertem Zugriff bereit.

  2. Eine Seite liefern, die nicht gefunden wurde.

  3. Stellen Sie eine Seitenumleitung zu einem Pfad oder einer externen URL aus.

  4. Oder einfach die Entität anzeigen (normales Verhalten).

Wie man :

Aktivieren Kaninchenbau Knoten Submodul Dann werden wir Config Abschnitt mit jeder Form in Drupal zugeordnet bekommen CODE

Niksmac
quelle
6

Gelöst Zuerst habe ich versucht, Pierre Buyle zu antworten, aber wenn Sie die Veröffentlichung eines Knotens aufheben, kann nicht ordnungsgemäß darauf zugegriffen werden, und diese Knoten werden unbrauchbar. In meinem Fall habe ich übergeordnete und untergeordnete Knoten. Nur untergeordnete Knoten (für Verwaltungszwecke) müssen ausgeblendet und NICHT von Crawlern indiziert werden. Was ich mit dem Seitenmanager gemacht habe, ist eine URL-Umleitung (die diese Knoten für alle Benutzer außer admin verbirgt) mit einer http-Antwort, die gemäß diesem Tutorial von http://www.wunderkraut.com/ 1 und No-Index-Knoten von Crawlern behandelt wird von Node No-Index-Modul . Dies funktioniert auch dann, wenn Sie keine Paret-Child-Knotenbeziehung haben. Link zum Tutorial:

pinueve
quelle
4

In Drupal 7 sollte es auch möglich sein, hook_node_access () zu verwenden . Dies ist ein normaler Hook in D7, der von allen Modulen für alle Knotentypen implementiert werden kann. Dann können Sie den Zugriff verweigern, wenn der Benutzer versucht, den Knoten auf seinem eigenen Knoten / seiner eigenen NID anzuzeigen.

Sie müssen wahrscheinlich auch hook_query_node_access_alter () implementieren und dort eine Prüfung hinzufügen, um den Knoten in den Suchergebnissen auszublenden. Dies könnte sogar alleine ausreichen und Sie brauchen hook_node_access () nicht. Und es könnte sogar in D6 funktionieren, weil Sie die Abfrage dort auch ändern können, aber in D7 ist es aufgrund des Abfrage-Generators viel einfacher.

Berdir
quelle
3

Setzen Sie diese Knoten einfach auf "unveröffentlicht" und fügen Sie in der Ansicht den Filter "Knoten veröffentlicht: Nein" hinzu.

Es empfiehlt sich, einen benutzerdefinierten Inhaltstyp für diese "Ghost" -Knoten zu erstellen und pathauto anzuweisen, ihnen bestimmte URLs zuzuweisen (ich verwende /dev/null/[title-raw];): Auch wenn der Knoten nicht veröffentlicht ist, verfügt er über einen eigenen URL-Alias. Wenn Sie also in Ihrem Beispiel zuerst den Geister-Knoten "Über uns" und dann die Ansichtsseite "Über uns" example.com/about-us-0erstellen, example.com/about-uswird die URL des zweiten aus dem Geister- Knoten übernommen (Sie können die Pfade jedoch manuell festlegen).

Strae
quelle
3

Sie können ein beliebiges Knotenzugriffssystem verwenden und views3 verwenden. Dort können Sie die SQL-Umschreibung in den Abfrageeinstellungen nicht deaktivieren und daher das Knotenzugriffssystem in dieser Ansicht deaktivieren.

Daniel Wehner
quelle
3

Sie können dies mithilfe der Regelmodule tun.
+ Neue Regel mit Ereignis "Inhalt wird angezeigt" erstellen.
+ Fügen Sie einige Bedingungen hinzu, zum Beispiel: Benutzer hat Rolle (n): anonym, Pfad hat URL-Alias: node / xyz (dies ist der Knoten, den Sie für anonyme Benutzer einschränken möchten). Denken Sie daran, "und" oder "oder" Bedingung hinzuzufügen, wenn es benötigt wird.
+ Aktion erstellen, um auf eine andere Seite umzuleiten oder etwas anderes zu tun. Dies ist der Beispielcode, den ich für Sie exportiert habe

{ "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
quelle
2

Ich denke, der einfachste Weg, um das zu erreichen, was Sie wollen, ist die Verwendung des Seitenmanagers (Ctools). Er ist wirklich einfach zu bedienen. Sie müssen nur angeben, welcher Knoten wohin umgeleitet werden soll (in diesem Fall von einem Knoten zu einem anderen).

Nicolas_ii
quelle
2

Das Content Access- Modul wird Ihren Anforderungen perfekt entsprechen.

Mit diesem Modul können Sie Berechtigungen für Inhaltstypen nach Rolle und Autor verwalten. Sie können für jeden Inhaltstyp benutzerdefinierte Berechtigungen zum Anzeigen, Bearbeiten und Löschen festlegen. Optional können Sie die Einstellungen für den Inhaltszugriff aktivieren, um den Zugriff für jeden Inhaltsknoten anzupassen.

Es enthält auch eine gute Dokumentation , die Ihnen den Einstieg erleichtert.

Ajits
quelle
2

Wenn Ihre Knoten mit "eingeschlossenem Inhalt" unzugänglich bleiben müssen, sollten Sie erwägen, / node / * auf der Ebene des Webservers "location = / node / *" zu blockieren . Standardmäßig wird der Zugriff auf alle / Knoten verweigert. Standardmäßig erlauben Sie den Zugriff auf Knoten, die einen Pfad-Auto-Pfad wie / pages erhalten haben.

(Das grundlegende .htaccess-Kennwort für Unterverzeichnisse ist eine angemessene Methode, um die versehentliche Indizierung der Suche auch durch externe Crawler zu blockieren.)

Sie können niemals garantieren, dass ein Knoten über ein beigetragenes Modul, das in Zukunft installiert wird, oder über ein Modul, das Sie noch nicht vollständig verstanden haben, nicht erreichbar ist. (Suchergebnisse, Auflistungen, Standardansichten, Taxonomiekategorienübersicht ...)

Dafür sind Knoten da.

Ist die Privatsphäre Ihrer "enthaltenen Inhalte" für Sie so wichtig? Wenn ja, dann ...

  1. Alles, was eine URL hat, wird irgendwann von Google getroffen.

    Denn Suchmaschinen verlassen sich nicht nur auf Linkspinnen. Sie werten auch Browser-Feedback usw. aus. Kein robot.txt- oder pathauto-, globalredirect- oder rabbithole-Modul hilft Ihnen, in Ruhe zu schlafen. Wenn auf den Knoten zugegriffen werden kann, wird er indiziert. Möglicherweise durch Ihren eigenen Browser / Addons.

  2. Überlegen Sie, ob "Inhalt, der aufgenommen werden soll" wirklich ein Knoten sein soll , wenn niemand als Seite darauf zugreifen soll ?

    Wenn Ihr "eingebundener Inhalt" in einem Mini-Panel / Block / Snippet / Bean / ... gespeichert wird, besteht für Sie ein viel geringeres Risiko, dass er jemals aufgelistet wird oder als Seite mit einer automatischen URL angezeigt wird Ich weiß es noch nicht. (Taxonomie-Übersichtsseiten, Suche, Ansichten ...)

user18099
quelle
0

Das Modul " Knotenseitenansicht einschränken" macht genau das, was Sie wollen.

Aus der Modulbeschreibung:

Haben Sie schon einmal einen Diashow-Knotentyp verwendet, der veröffentlicht werden muss, aber nicht möchte, dass der Knoten über den Pfad node / XXX für sich allein erreichbar ist? Dieses Modul ist für Sie!

Mit diesem Modul können Sie den Zugriff auf den fullAnsichtsmodus des Knotens einschränken , sodass Sie nicht auf den Knoten zugreifen können node/XXX.

Jdrupal
quelle