Come posso nascondere nodi a cui non è possibile accedere direttamente dagli utenti e dai motori di ricerca?


51

Ho scoperto che ci sono volte in cui ho un nodo che contiene semplicemente contenuto che verrà visualizzato da qualche altra parte, ma non dovrebbe essere visualizzato direttamente. Cioè, nessuno dovrebbe mai andare al nodo / 1234, ma il contenuto nel nodo 1234 dovrebbe essere visualizzato altrove. Ad esempio, creo una pagina di informazioni con contenuto a schede utilizzando le visualizzazioni. Quindi ci sono le pagine "Chi sono", "Chi siamo" e "Chi sono". Tutti questi sono visualizzati in una singola pagina con schede che utilizzano Viste. Quindi non voglio che le persone arrivino direttamente al nodo "Chi siamo" perché non vedrebbero le schede per le altre pagine. Allo stesso tempo, non voglio che Google dia alle persone un collegamento diretto a questo nodo, voglio limitare l'accesso in modo che gli utenti possano accedervi solo attraverso la Vista (cioè la scheda).

Quindi devo limitare l'accesso al nodo, rimuoverlo dai risultati di ricerca di Drupal e assicurarmi che Google non lo raccolga. Eventuali suggerimenti?


Attualmente sto usando drupal 6, ma se è diverso tra 6 e 7, penso che sarebbe utile rispondere per entrambi
Chaulky

Se sei preoccupato per pochi nodi, perché non aggiungerli al file robots.txt per escluderli dalle ricerche di Google?
Tangurena,

Questo è un malinteso comune. robots.txt non impedisce ai motori di ricerca di indicizzare il tuo sito, impedisce ai motori di ricerca di eseguire la scansione del tuo sito. Se qualcuno si collega a una pagina del tuo sito, Google seguirà il collegamento e indicizzerà la pagina se lo desidera. Se si desidera impedire l' indicizzazione, è necessario utilizzare il metatag ROBOTS, ovvero: <meta name = "ROBOTS" value = "NOINDEX" />
René

Risposte:


28

Questo mi sembra un buon caso d'uso per il modulo Pannelli perché puoi creare pannelli che sovrascriveranno le pagine dei nodi e puoi impostare il contesto per il pannello in un modo che dovrebbe garantire agli utenti di vedere la pagina che vuoi che lo vedano e accedi alle regole per le pagine del pannello se ne hai bisogno. Per ulteriori dettagli, vedere questo post su do


questo sembra fare esattamente quello che voglio, e in un modo pulito e semplice ... arriva anche con un tutorial (bel link) !!
Chaulky

Non è un problema eccessivo rispetto alla soluzione del modulo Rabbit Hole? Ci sono vantaggi extra in questo che lo rende la risposta scelta?
Mario Awad,

1
@MarioAwad Bene, per uno il modulo Rabbit Hole non esisteva nemmeno fino a oltre un anno dopo aver risposto a questa domanda. All'epoca, Panels era la soluzione migliore, penso ancora che sia la soluzione migliore se qualcuno ha già installato dei pannelli, altrimenti Rabbit Hole potrebbe essere una soluzione leggera migliore.
coderintherye,

@nowarninglabel Sembra un buon consiglio. Grazie. Forse dovresti aggiungere questo chiarimento alla risposta per renderlo migliore per i futuri arrivati. Saluti.
Mario Awad,

33

Il modulo Rabbit Hole fornisce questa funzione.

Rabbit Hole è un modulo che aggiunge la possibilità di controllare cosa dovrebbe accadere quando un'entità viene visualizzata sulla propria pagina.

Forse hai un tipo di contenuto che non dovrebbe mai essere visualizzato sulla propria pagina, come un tipo di contenuto di immagine che viene visualizzato in un carosello. Rabbit Hole può impedire a questo nodo di essere accessibile sulla propria pagina, tramite node / xxx.


Ora c'è una versione di Drupal 6.
mpdonadio

Eccellente, una soluzione pulita e semplice.
Jamix,

1
Bene, questo è migliore del modulo del pannello (per questo caso d'uso) se si desidera solo impedire l'accesso diretto a un nodo content_type poiché fa solo questo!
Larzan,

13

Un'opzione potrebbe essere quella di non pubblicare mai il nodo ma che la pagina del consumatore ignori il loro stato di pubblicazione. Pertanto, nel tuo esempio, la vista "Informazioni su" potrebbe semplicemente ignorare lo stato di pubblicazione dei nodi "Informazioni su xxx". Poiché i nodi non sono pubblicati, l'utente non autorizzato non può accedervi e non devono essere indicizzati dal motore di ricerca.

Un'altra soluzione è utilizzare un'implementazione hook_nodeapi('view')/ hook_node_view()per emettere un drupal_goto()o drupal_access_denied()quando la pagina del nodo viene visitata da un utente non autorizzato. Tenere presente che hook_nodeapi()/ hook_node_view()sono utilizzati in molti casi e non solo durante la visualizzazione di una pagina di nodo.

hook_menu_alter()può anche essere usato per modificare il callback di accesso delle pagine del nodo per negare l'accesso ai nodi nascosti .

Probabilmente la cosa migliore non è basare il filtro sull'ID nodo codificato ma utilizzare un campo personalizzato sul nodo (utilizzando CCK / API di campo o una tabella personalizzata) o un elenco di nodi nascosti memorizzati in una variabile .


@ mongolity404 bel post, buone informazioni. Mi ha dato idee per alcune altre cose. Ma perché wiki della comunità?
Chaulky

Ho fatto la mia risposta wiki della community nel caso in cui qualcuno abbia voglia di fornire un esempio di codice per le opzioni che ho suggerito ...
Pierre Buyle,

7

Per Drupal 7, Rabbit Hole offre questa funzione.

Rabbit Hole è un modulo che aggiunge la possibilità di controllare cosa dovrebbe accadere quando un'entità viene visualizzata sulla propria pagina.

Funziona fornendo più opzioni per controllare cosa dovrebbe accadere quando l'entità viene visualizzata sulla propria pagina. Hai la possibilità di

  1. Fornire una pagina di accesso negato.

  2. Consegna una pagina non trovata.

  3. Emettere una pagina di reindirizzamento a qualsiasi percorso o URL esterno.

  4. O semplicemente visualizzare l'entità (comportamento regolare).

Come :

Abilita sottomodulo nodi Rabbit Hole Quindi otterremo la sezione di configurazione associata a ogni modulo in Drupal CODE


6

Risolto. Per prima cosa ho provato la risposta di Pierre Buyle, ma se si annulla la pubblicazione di un nodo, non è possibile accedervi con un propper e quei nodi diventano inutili. Nel mio caso ho nodi padre e figlio, solo i nodi figlio (a fini di amministrazione) sono quelli da nascondere e NON essere indicizzati dai crawler. Quello che ho fatto con il gestore della pagina ha fatto un reindirizzamento dell'URL (nascondendo questi nodi a tutti gli utenti tranne l'amministratore) con una risposta http secondo questo tutorial di http://www.wunderkraut.com/ 1 e i nodi senza indice dei crawler sono gestiti a mano dal modulo no-index del nodo . Funzionerà anche se non hai una relazione nodo paret-child. Link al tutorial:


4

In Drupal 7, dovrebbe anche essere possibile usare hook_node_access () , questo è un normale hook in D7 che può essere implementato da tutti i moduli per tutti i tipi di nodo. Quindi è possibile negare l'accesso se l'utente sta provando a visualizzare il nodo sul proprio nodo / nid.

Probabilmente dovrai anche implementare hook_query_node_access_alter () e aggiungere un segno di spunta per nascondere il nodo nei risultati di ricerca. Questo potrebbe anche essere sufficiente da solo e non è necessario hook_node_access (). E potrebbe anche funzionare in D6 perché è possibile modificare anche la query lì, ma è molto più semplice in D7 a causa del generatore di query.


3

Basta impostare il nodo come "non pubblicato", quindi, nella vista, aggiungere il filtro "nodo pubblicato: no".

Come nota seo, è una buona pratica creare un tipo di contenuto personalizzato per quei nodi "fantasma", e dire a pathauto di fornire loro degli URL specifici (io uso /dev/null/[title-raw];): anche se il nodo non è pubblicato, avrà il suo alias url, quindi nel tuo esempio se crei prima il nodo fantasma 'chi siamo', e poi la pagina di visualizzazione 'chi siamo', l'URL del secondo verrà preso example.com/about-us-0perché example.com/about-usè stato preso da quello fantasma (tuttavia, puoi impostare i percorsi manualmente)


3

È possibile utilizzare qualsiasi tipo di sistema di accesso al nodo e utilizzare views3. Lì non è possibile disabilitare la riscrittura sql nelle impostazioni della query e quindi è possibile disabilitare il sistema di accesso al nodo in questa vista.


3

Puoi farlo utilizzando i moduli delle regole.
+ Crea nuova regola con l'evento "Il contenuto è visualizzato".
+ Aggiungi un paio di condizioni per esempio: l'utente ha un ruolo (i): anonimo, Path ha l'alias URL: node / xyz (questo è il nodo che vuoi limitare per l'utente anonimo). Ricorda di aggiungere "e" o "o" condizione se è necessario.
+ Crea azione per reindirizzare a un'altra pagina o fare qualcos'altro. Questo è il codice di esempio che ho esportato per te

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

Penso che il modo più semplice per ottenere ciò che vuoi sia usare il Page manager (Ctools), sia davvero semplice da usare, tutto quello che devi fare è specificare quale nodo reindirizzare dove (in questo caso, da un nodo all'altro)


2

Il modulo di accesso ai contenuti soddisfa perfettamente le tue esigenze.

Questo modulo consente di gestire le autorizzazioni per i tipi di contenuto per ruolo e autore. Ti consente di specificare la visualizzazione personalizzata, modificare ed eliminare le autorizzazioni per ciascun tipo di contenuto. Facoltativamente, è possibile abilitare le impostazioni di accesso al contenuto, in modo da poter personalizzare l'accesso per ciascun nodo del contenuto.

Ha anche una buona documentazione per aiutarti a iniziare.


2

Se i nodi "contenuto incluso" devono rimanere inaccessibile, quindi prendere in considerazione il blocco / / * sul nodo server web "location = / / * nodo" di livello . Predefinito nega l'accesso a tutti / nodi. L'impostazione predefinita consente l'accesso ai nodi che hanno ricevuto un percorso-percorso automatico come / pagine.

(La password di base .htaccess per le sottodirectory è un modo decente di bloccare l'indicizzazione della ricerca accidentale anche da crawler esterni.)

Non è mai possibile garantire che un nodo non diventerà accessibile tramite un modulo contribuito che verrà installato in futuro o che non si comprende ancora completamente. (Risultati della ricerca, elenchi, visualizzazioni predefinite, panoramica delle categorie di tassonomia ...)

È a cosa servono i nodi.

La privacy dei tuoi "contenuti inclusi" è così importante per te? Se è così, allora ...

  1. Google ha tutto ciò che ha un URL alla fine.

    Perché i motori di ricerca non si basano solo sui link spider. Valutano anche il feedback del browser, ecc. Nessun modulo robot.txt o pathauto, globalredirect, rabbithole ti aiuterà a dormire in pace. Se è possibile accedere al nodo, verrà indicizzato. Forse dal tuo browser / componenti aggiuntivi.

  2. Riconsiderare se "il contenuto da includere" dovrebbe davvero essere un nodo , se nessuno dovrebbe accedervi come pagina ?

    Se il tuo "contenuto incluso" verrebbe archiviato in un mini-panel / block / snippet / bean / ..., allora hai un rischio molto più basso di essere mai elencato o apparire come una pagina con un URL automatico che non lo so ancora. (pagine di panoramica della tassonomia, ricerca, visualizzazioni ...)


0

Il modulo Restrict Node Page View fa esattamente quello che vuoi.

Dalla descrizione del modulo:

Hai mai usato un nodetipo di presentazione che devi pubblicare, ma non vuoi che il nodo sia accessibile da solo usando il percorso nodo / XXX? Questo modulo è per te!

Con questo modulo è possibile limitare l'accesso alla fullmodalità di visualizzazione del nodo , quindi non è possibile accedere al nodo node/XXX.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.