Bagaimana cara menyembunyikan node yang tidak boleh diakses langsung dari pengguna dan mesin pencari?

51

Saya telah menemukan bahwa ada kalanya saya memiliki simpul yang hanya berisi konten yang akan ditampilkan di tempat lain, tetapi tidak boleh dilihat secara langsung. Artinya, tidak ada yang harus pergi ke node / 1234, tetapi konten di node 1234 harus ditampilkan di tempat lain. Misalnya, saya membuat halaman tentang dengan konten tab menggunakan tampilan. Jadi ada halaman "Tentang Saya", "Tentang Kami" dan "Tentang Mereka". Semua ini ditampilkan dalam satu halaman dengan tab menggunakan Tampilan. Jadi saya tidak ingin orang langsung masuk ke simpul "Tentang Kami" karena mereka tidak akan melihat tab untuk halaman lain. Pada saat yang sama, saya tidak ingin Google memberi orang tautan langsung ke simpul ini, saya ingin membatasi akses sehingga pengguna hanya dapat mengaksesnya melalui Tampilan (yaitu, tab).

Jadi saya perlu membatasi akses ke node, menghapusnya dari hasil pencarian Drupal, dan memastikan Google tidak mengambilnya. Ada saran?

Chaulky
sumber
Saya saat ini menggunakan drupal 6, tetapi jika berbeda antara 6 dan 7, saya pikir akan berguna untuk menjawab keduanya
Chaulky
Jika Anda khawatir hanya beberapa node, mengapa tidak menambahkannya ke file robots.txt untuk mengecualikan mereka dari pencarian Google?
Tangurena
Ini adalah kesalahpahaman umum. robots.txt tidak mencegah mesin pencari untuk mengindeks situs Anda, itu mencegah mesin pencari dari merayapi situs Anda. Jika seseorang menautkan ke halaman di situs Anda, Google akan mengikuti tautan itu dan mengindeks halaman itu jika diinginkan. Jika Anda ingin mencegah pengindeksan, Anda perlu menggunakan meta tag ROBOT, yaitu: <meta name = "ROBOTS" value = "NOINDEX" />
René

Jawaban:

28

Bagi saya ini kedengarannya seperti kasus penggunaan yang baik untuk modul Panel karena Anda dapat membuat panel yang akan mengesampingkan halaman node, dan dapat mengatur konteks untuk panel dengan cara harus menjamin pengguna melihat halaman yang Anda ingin mereka lihat serta aturan akses untuk halaman panel jika Anda membutuhkannya. Untuk detail lebih lanjut, lihat posting ini di do

coderintherye
sumber
ini terlihat melakukan persis apa yang saya inginkan, dan dengan cara yang bersih dan sederhana ... bahkan disertai dengan tutorial (tautan bagus) !!
Chaulky
Bukankah ini berlebihan dibandingkan dengan solusi modul Rabbit Hole? Apakah ada manfaat tambahan untuk ini yang menjadikannya jawaban yang dipilih?
Mario Awad
1
@MarioAwad Ya, untuk satu modul Rabbit Hole bahkan tidak ada sampai lebih dari setahun setelah saya menjawab pertanyaan ini. Pada saat itu, Panel adalah solusi terbaik, saya masih berpikir itu adalah solusi terbaik jika seseorang telah menginstal panel, jika tidak maka Rabbit Hole mungkin merupakan solusi yang lebih ringan.
coderintherye
@nowarninglabel Kedengarannya seperti tip yang bagus. Terima kasih. Mungkin Anda harus menambahkan klarifikasi ini pada jawaban untuk membuatnya lebih baik bagi pendatang di masa depan. Tepuk tangan.
Mario Awad
33

The Rabbit Hole modul menyediakan fitur ini.

Rabbit Hole adalah modul yang menambahkan kemampuan untuk mengendalikan apa yang harus terjadi ketika suatu entitas dilihat pada halamannya sendiri.

Mungkin Anda memiliki tipe konten yang tidak boleh ditampilkan di halamannya sendiri, seperti tipe konten gambar yang ditampilkan dalam carousel. Rabbit Hole dapat mencegah agar simpul ini tidak dapat diakses di halamannya sendiri, melalui simpul / xxx.

Pierre Buyle
sumber
Sekarang ada versi Drupal 6.
mpdonadio
Luar biasa, solusi bersih dan sederhana.
jamix
1
Bagus, ini lebih baik daripada modul panel (untuk kasus penggunaan ini) jika Anda hanya ingin mencegah akses langsung ke node content_type karena hanya itu!
Larzan
13

Salah satu opsi mungkin untuk tidak pernah mempublikasikan node tetapi membiarkan halaman konsumen mengabaikan status publikasi mereka. Jadi, dalam contoh Anda, tampilan "Tentang" Anda mungkin mengabaikan status publikasi dari simpul "Tentang-xxx" Anda. Karena node tidak dipublikasikan, pengguna yang tidak diotorisasi tidak dapat mengaksesnya dan tidak boleh diindeks oleh mesin pencari.

Solusi lain adalah dengan menggunakan hook_nodeapi('view')/ hook_node_view()implementasi untuk mengeluarkan drupal_goto()atau drupal_access_denied()ketika halaman node dikunjungi oleh pengguna yang tidak resmi. Sadarilah bahwa hook_nodeapi()/ hook_node_view()digunakan dalam banyak kasus dan tidak hanya saat melihat halaman simpul.

hook_menu_alter()juga dapat digunakan untuk mengubah akses balik halaman node untuk menolak akses ke node tersembunyi .

Yang terbaik mungkin bukan mendasarkan pemfilteran pada ID node yang dikodekan tetapi menggunakan bidang khusus pada node (menggunakan CCK / Field API atau tabel kustom) atau daftar node tersembunyi yang disimpan dalam variabel .

Pierre Buyle
sumber
@ mongolity404 postingan bagus, informasi bagus. Memberi saya ide untuk beberapa hal lainnya. Tapi mengapa komunitas wiki?
Chaulky
Saya membuat wiki komunitas jawaban saya jika seseorang merasa ingin memberikan contoh kode untuk opsi yang saya sarankan ...
Pierre Buyle
7

Untuk Drupal 7, Lubang Kelinci menyediakan fitur ini.

Rabbit Hole adalah modul yang menambahkan kemampuan untuk mengendalikan apa yang harus terjadi ketika en entitas dilihat di halamannya sendiri.

Ini berfungsi dengan memberikan beberapa opsi untuk mengontrol apa yang harus terjadi ketika entitas dilihat di halamannya sendiri. Anda memiliki kemampuan untuk melakukannya

  1. Memberikan halaman yang ditolak aksesnya.

  2. Kirimkan halaman yang tidak ditemukan halaman.

  3. Terbitkan laman yang dialihkan ke jalur apa pun atau url eksternal.

  4. Atau cukup tampilkan entitas (perilaku biasa).

Bagaimana cara:

Aktifkan submodule node Lubang Kelinci Kemudian kita akan mendapatkan bagian konfigurasi yang terkait dengan setiap formulir dalam KODE Drupal

niksmac
sumber
6

Terpecahkan. Pertama saya mencoba jawaban Pierre Buyle, tetapi jika Anda membatalkan penerbitan suatu simpul, itu tidak dapat diakses dengan benar dan simpul-simpul itu menjadi tidak berguna. Dalam kasus saya, saya memiliki simpul orang tua dan anak, hanya simpul anak (untuk keperluan admin) yang harus disembunyikan dan TIDAK diindeks oleh crawler. Apa yang saya lakukan dengan pengelola halaman membuat url redirect (menyembunyikan simpul-simpul ini ke semua pengguna kecuali admin) dengan respons http sesuai dengan tuturial ini oleh http://www.wunderkraut.com/ 1 dan tidak ada indeks indeks oleh crawler yang di-handlel. oleh Node no-index module . Ini akan berfungsi bahkan jika Anda tidak memiliki hubungan simpul paret-child. Tautan ke tutorial:

tajam
sumber
4

Dalam Drupal 7, seharusnya juga dimungkinkan untuk menggunakan hook_node_access () , ini adalah pengait normal di D7 yang dapat diimplementasikan oleh semua modul untuk semua jenis simpul. Kemudian Anda dapat menolak akses jika pengguna mencoba untuk melihat simpul pada simpulnya sendiri / nid.

Anda mungkin juga perlu mengimplementasikan hook_query_node_access_alter () dan menambahkan tanda centang di sana untuk menyembunyikan simpul di hasil pencarian. Ini bahkan mungkin sudah cukup untuk itu sendiri dan Anda tidak perlu hook_node_access (). Dan itu bahkan mungkin bekerja di D6 karena Anda dapat mengubah kueri di sana juga, tetapi itu jauh lebih mudah di D7 karena pembuat kueri.

Berdir
sumber
3

Cukup setel simpul itu sebagai 'tidak diterbitkan', kemudian, dalam tampilan tambahkan filter 'simpul yang diterbitkan: tidak'.

Sebagai catatan seo, adalah praktik yang baik untuk membuat tipe konten khusus untuk simpul 'hantu' tersebut, dan memberi tahu pathauto untuk memberi mereka url spesifik (saya gunakan /dev/null/[title-raw];): bahkan jika node tidak dipublikasikan, ia akan memiliki alias url sendiri, jadi dalam contoh Anda jika Anda membuat pertama simpul hantu 'tentang kami', dan kemudian halaman tampilan 'tentang kami', url kedua akan diambil example.com/about-us-0karena example.com/about-ustelah diambil dari hantu itu (namun, Anda dapat mengatur jalur secara manual)

Strae
sumber
3

Anda bisa menggunakan segala jenis sistem akses-simpul dan menggunakan views3. Di sana Anda tidak dapat menonaktifkan sql menulis ulang pada pengaturan permintaan dan sehingga Anda dapat menonaktifkan sistem akses node pada tampilan ini.

Daniel Wehner
sumber
3

Anda dapat melakukannya dengan menggunakan modul aturan.
+ Buat aturan baru dengan acara "Konten dilihat".
+ Tambahkan beberapa kondisi sebagai contoh: Pengguna memiliki peran: anonim, Path memiliki URL alias: node / xyz (ini adalah simpul yang ingin Anda batasi untuk pengguna anonim). Ingat menambahkan "dan" atau "atau" kondisi jika diperlukan.
+ Buat tindakan untuk mengalihkan ke halaman lain atau melakukan sesuatu yang lain. Ini adalah kode sampel yang saya ekspor untuk Anda

{ "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" } } ]
 }
}
Batu Vo
sumber
2

Saya pikir cara termudah untuk mencapai apa yang Anda inginkan adalah dengan menggunakan Page manager (Ctools), benar-benar mudah digunakan, yang harus Anda lakukan adalah menentukan node mana yang akan dialihkan di mana (dalam hal ini, dari satu node ke yang lain)

Nicolas_ii
sumber
2

The Access Content modul akan sesuai kebutuhan Anda dengan sempurna.

Modul ini memungkinkan Anda untuk mengelola izin untuk jenis konten berdasarkan peran dan penulis. Ini memungkinkan Anda menentukan tampilan khusus, mengedit, dan menghapus izin untuk setiap jenis konten. Secara opsional, Anda dapat mengaktifkan per pengaturan akses konten, sehingga Anda dapat menyesuaikan akses untuk setiap node konten.

Ini juga memiliki dokumentasi yang bagus untuk membantu Anda memulai.

Ajit
sumber
2

Jika Anda "konten termasuk" node perlu tinggal tidak dapat diakses, maka pertimbangkan memblokir / node / * pada webserver "Lokasi = / node / *" tingkat . Default tolak akses ke semua / node. Default memungkinkan akses ke node yang menerima path-auto path like / pages.

(Kata sandi .htaccess dasar untuk subdirektori juga merupakan cara yang layak untuk memblokir pengindeksan pencarian tidak disengaja oleh crawler eksternal.)

Anda tidak pernah dapat menjamin bahwa suatu node tidak akan dapat diakses melalui modul kontribusi yang kebetulan diinstal di masa depan, atau yang belum Anda pahami sepenuhnya. (Hasil pencarian, daftar, tampilan default, ikhtisar kategori taksonomi ...)

Ini adalah tujuan dari node.

Apakah privasi "konten yang disertakan" Anda itu penting bagi Anda? Jika demikian, maka ...

  1. Segala sesuatu yang memiliki URL pada akhirnya akan terkena google.

    Karena mesin pencari tidak mengandalkan tautan laba-laba saja. Mereka juga mengevaluasi umpan balik peramban dll. Tidak ada robot.txt, atau pathauto, globalredirect, modul rabbithole akan membantu Anda tidur dengan tenang. Jika node dapat diakses, maka itu akan diindeks. Mungkin oleh browser / addons Anda sendiri.

  2. Mempertimbangkan kembali jika "konten yang akan dimasukkan" harus benar-benar menjadi simpul , jika tidak ada yang mengaksesnya sebagai halaman ?

    Jika "konten yang disertakan" Anda akan disimpan di dalam mini-panel / blok / snippet / bean / ..., maka Anda berada pada risiko yang jauh lebih rendah dari yang pernah terdaftar, atau pernah muncul sebagai halaman dengan URL otomatis Anda belum tahu tentang . (halaman ikhtisar taksonomi, pencarian, tampilan ...)

pengguna18099
sumber
0

The Membatasi Node Page View modul tidak persis apa yang Anda inginkan.

Dari deskripsi modul:

Pernahkah Anda menggunakan slideshow tipe slide yang perlu Anda publikasikan tetapi tidak ingin simpulnya dapat diakses sendiri menggunakan jalur node / XXX? Modul ini untuk Anda!

Dengan modul ini, Anda dapat membatasi akses ke fullmode tampilan simpul , sehingga Anda tidak dapat mengakses simpul tersebut node/XXX.

Jdrupal
sumber