ฉันจะซ่อนโหนดที่ไม่ควรเข้าถึงได้โดยตรงจากผู้ใช้และเครื่องมือค้นหาได้อย่างไร


51

ฉันพบว่ามีบางครั้งที่ฉันมีโหนดที่มีเนื้อหาที่จะแสดงที่อื่น แต่ไม่ควรดูโดยตรง นั่นคือไม่มีใครควรไปที่โหนด / 1234 แต่เนื้อหาในโหนด 1234 ควรแสดงที่อื่น ตัวอย่างเช่นฉันสร้างหน้าเกี่ยวกับเนื้อหาแบบแท็บโดยใช้มุมมอง ดังนั้นจึงมีหน้า "เกี่ยวกับฉัน", "เกี่ยวกับเรา" และ "เกี่ยวกับพวกเขา" ทั้งหมดเหล่านี้จะแสดงในหน้าเดียวกับแท็บโดยใช้มุมมอง ดังนั้นฉันไม่ต้องการให้ผู้คนไปที่โหนด "เกี่ยวกับเรา" โดยตรงเพราะพวกเขาจะไม่เห็นแท็บสำหรับหน้าอื่น ๆ ในขณะเดียวกันฉันไม่ต้องการให้ Google ให้การเชื่อมโยงโดยตรงกับโหนดนี้แก่ผู้อื่นฉันต้องการ จำกัด การเข้าถึงเพื่อให้ผู้ใช้สามารถเข้าถึงได้ผ่านมุมมอง (เช่นแท็บ)

ดังนั้นฉันจึงจำเป็นต้อง จำกัด การเข้าถึงโหนดลบมันออกจากผลการค้นหา Drupal และตรวจสอบให้แน่ใจว่า Google ไม่ได้ไปรับมัน ข้อเสนอแนะใด ๆ


ฉันกำลังใช้ drupal 6 แต่ถ้ามันแตกต่างระหว่าง 6 และ 7 ฉันคิดว่ามันจะมีประโยชน์ที่จะตอบทั้งคู่
Chaulky

หากคุณกังวลว่ามีเพียงไม่กี่โหนดทำไมไม่เพิ่มลงในไฟล์robots.txtเพื่อแยกออกจากการค้นหาของ Google
Tangurena

นี่คือความเข้าใจผิดที่พบบ่อย robots.txt ไม่ได้ป้องกันเครื่องมือค้นหาเพื่อจัดทำดัชนีเว็บไซต์ของคุณ แต่จะป้องกันไม่ให้เครื่องมือค้นหารวบรวมข้อมูลเว็บไซต์ของคุณ หากมีใครลิงก์ไปยังหน้าหนึ่งในเว็บไซต์ของคุณ Google จะติดตามลิงก์และจัดทำดัชนีหน้าเว็บหากต้องการ หากคุณต้องการป้องกันการจัดทำดัชนีคุณต้องใช้เมตาแท็ก ROBOTS เช่น: <meta name = "ROBOTS" value = "NOINDEX" />
René

คำตอบ:


28

สิ่งนี้ฟังดูเป็นกรณีใช้งานที่ดีสำหรับโมดูล Panelsเพราะคุณสามารถสร้างพาเนลที่จะแทนที่หน้าโหนดและสามารถตั้งค่าบริบทสำหรับพาเนลในแบบที่ควรรับประกันว่าผู้ใช้จะเห็นหน้าเว็บที่คุณต้องการให้ดู เข้าถึงกฎสำหรับหน้าพาเนลหากคุณต้องการ สำหรับรายละเอียดเพิ่มเติมดูโพสต์นี้ทำ


ดูเหมือนว่าจะทำสิ่งที่ฉันต้องการและในวิธีที่สะอาดและเรียบง่าย ... แม้มาพร้อมกับการสอน (ลิงค์ที่ดี) !!
Chaulky

นี่มันเกินความจริงเมื่อเทียบกับโซลูชั่นโมดูล Rabbit Hole หรือไม่ มีประโยชน์เพิ่มเติมสำหรับสิ่งนี้ที่ทำให้เป็นคำตอบที่เลือกหรือไม่
Mario Awad

1
@ MarioAwad เอาล่ะสำหรับโมดูล Rabbit Hole ไม่มีอยู่จริงจนกระทั่งเมื่อผ่านไปหนึ่งปีหลังจากที่ฉันตอบคำถามนี้ ในตอนนั้น Panels เป็นทางออกที่ดีที่สุดฉันยังคงคิดว่ามันเป็นทางออกที่ดีที่สุดหากมีใครติดตั้งพาเนลไว้แล้ว แต่หากไม่ใช่ Rabbit Rabbit ก็อาจเป็นทางออกที่เบากว่า
coderintherye

@nowarninglabel ฟังดูเหมือนเป็นคำแนะนำที่ดี ขอบคุณ บางทีคุณควรเพิ่มคำอธิบายนี้ลงในคำตอบเพื่อให้ดีขึ้นสำหรับผู้มาใช้ในอนาคต ไชโย
Mario Awad

33

โพรงกระต่ายโมดูลมีคุณลักษณะนี้

Rabbit Hole เป็นโมดูลที่เพิ่มความสามารถในการควบคุมสิ่งที่จะเกิดขึ้นเมื่อมีการดูเอนทิตีในหน้าของตัวเอง

บางทีคุณอาจมีประเภทเนื้อหาที่ไม่ควรแสดงในหน้าของตัวเองเช่นประเภทเนื้อหารูปภาพที่แสดงในภาพหมุน Rabbit Hole สามารถป้องกันไม่ให้โหนดนี้สามารถเข้าถึงได้ในหน้าของตัวเองผ่านทางโหนด / xxx


ขณะนี้มีรุ่น Drupal 6
mpdonadio

สุดยอดวิธีการทำความสะอาดและเรียบง่าย
jamix

1
ดีมากอันนี้ดีกว่าโมดูลพาเนล (สำหรับกรณีการใช้งานนี้) หากคุณต้องการป้องกันการเข้าถึงโหนด content_type โดยตรงเช่นเดียวกับที่ทำ!
Larzan

13

ทางเลือกหนึ่งอาจไม่เคยเผยแพร่โหนด แต่มีหน้าผู้บริโภคไม่สนใจสถานะสิ่งพิมพ์ของพวกเขา ดังนั้นในตัวอย่างของคุณมุมมอง "เกี่ยวกับ" ของคุณอาจเพิกเฉยต่อสถานะการเผยแพร่ของโหนด "About-xxx" ของคุณ เนื่องจากโหนดไม่ถูกเผยแพร่ผู้ใช้ที่ไม่ได้รับอนุญาตจึงไม่สามารถเข้าถึงได้และไม่ควรทำดัชนีโดยเครื่องมือค้นหา

อีกวิธีหนึ่งคือการใช้hook_nodeapi('view')/ hook_node_view()การนำไปใช้ในการออกdrupal_goto()หรือdrupal_access_denied()เมื่อมีการเยี่ยมชมหน้าโหนดโดยผู้ใช้ที่ไม่ได้รับอนุญาต ระวังว่าhook_nodeapi()/ hook_node_view()ถูกใช้ในหลายกรณีและไม่เพียง แต่เมื่อดูหน้าโหนด

hook_menu_alter()ยังสามารถใช้เพื่อแก้ไขการเรียกกลับการเข้าถึงของหน้าโหนดเพื่อปฏิเสธการเข้าถึงโหนดที่ซ่อนอยู่

ที่ดีที่สุดอาจจะไม่ได้เป็นฐานการกรองบนฮาร์ดรหัสโหนด ID แต่จะใช้ข้อมูลที่กำหนดเองบนโหนด (ใช้ CCK / สนาม API หรือตารางที่กำหนดเอง) หรือรายการของที่ซ่อนอยู่โหนดเก็บไว้ในตัวแปร


@ mongolity404 โพสต์ที่ดีข้อมูลที่ดี ให้ความคิดกับฉันสำหรับสิ่งอื่น ๆ แต่ทำไมชุมชนวิกิ
Chaulky

ฉันทำให้ชุมชนคำตอบของฉัน wiki ในกรณีที่ใครบางคนรู้สึกเหมือนการให้ตัวอย่างโค้ดสำหรับตัวเลือกที่ฉันแนะนำ ...
Pierre Buyle

7

สำหรับ Drupal 7 นั้นRabbit Hole นำเสนอคุณสมบัตินี้

Rabbit Hole เป็นโมดูลที่เพิ่มความสามารถในการควบคุมสิ่งที่ควรเกิดขึ้นเมื่อเอนทิตีถูกดูที่หน้าของตัวเอง

วิธีนี้ใช้ได้โดยมีตัวเลือกมากมายเพื่อควบคุมสิ่งที่ควรเกิดขึ้นเมื่อมีการดูเอนทิตีในหน้าของตนเอง คุณมีความสามารถที่จะ

  1. ส่งหน้าถูกปฏิเสธการเข้าถึง

  2. ส่งหน้าไม่พบหน้า

  3. ออกหน้าเปลี่ยนเส้นทางไปยังเส้นทางหรือ URL ภายนอก

  4. หรือเพียงแค่แสดงเอนทิตี (พฤติกรรมปกติ)

ทำอย่างไร :

เปิดใช้งานsubmodule โหนด Rabbit Holeจากนั้นเราจะได้รับส่วนการตั้งค่าที่เกี่ยวข้องกับทุกรูปแบบใน Drupal CODE


6

แก้ไข ก่อนอื่นฉันลองคำตอบของ Pierre Buyle แต่ถ้าคุณยกเลิกการเผยแพร่โหนดมันจะไม่สามารถเข้าถึง propper ได้และโหนดเหล่านั้นจะไร้ประโยชน์ ในกรณีของฉันฉันมีโหนดพาเรนต์และโหนดเดียวโหนดลูก (สำหรับจุดประสงค์ด้านการดูแลระบบ) เป็นโหนดที่จะซ่อนและไม่ถูกทำดัชนีโดยโปรแกรมรวบรวมข้อมูล สิ่งที่ฉันทำกับผู้จัดการเพจทำการเปลี่ยนเส้นทาง URL (การซ่อนโหนดเหล่านี้กับผู้ใช้ทั้งหมดยกเว้นผู้ดูแลระบบ) ด้วยการตอบสนอง http ตามแบบฝึกหัดนี้โดยhttp://www.wunderkraut.com/ 1และไม่มีการทำดัชนีโหนดโดยซอฟต์แวร์รวบรวมข้อมูล โดยโหนดโมดูลไม่มีดัชนี สิ่งนี้จะใช้ได้แม้ว่าคุณจะไม่ได้มีความสัมพันธ์กับโหนดลูก - ลิงก์ไปยังบทช่วยสอน:


4

ใน Drupal 7 มันควรจะเป็นไปได้ที่จะใช้hook_node_access ()นี่เป็น hook ปกติใน D7 ซึ่งสามารถนำไปใช้โดยโมดูลทั้งหมดสำหรับโหนดทุกประเภท จากนั้นคุณสามารถปฏิเสธการเข้าถึงหากผู้ใช้พยายามดูโหนดบนโหนด / nid ของเขาเอง

คุณอาจต้องใช้ hook_query_node_access_alter () และเพิ่มการตรวจสอบที่นั่นเพื่อซ่อนโหนดในผลการค้นหา นี่อาจจะเพียงพอสำหรับตัวคุณเองและคุณไม่จำเป็นต้องใช้ hook_node_access () และมันอาจทำงานได้ใน D6 เพราะคุณสามารถแก้ไขแบบสอบถามที่นั่นได้เช่นกัน แต่มันง่ายกว่ามากใน D7 เนื่องจากตัวสร้างแบบสอบถาม


3

เพียงตั้งค่าโหนดเหล่านั้นเป็น 'ไม่ได้เผยแพร่' จากนั้นในมุมมองให้เพิ่มตัวกรอง 'โหนดที่เผยแพร่: no'

ตามที่ทราบ seo เป็นวิธีปฏิบัติที่ดีในการสร้างประเภทเนื้อหาที่กำหนดเองสำหรับโหนด 'ghost' เหล่านั้นและบอกให้ pathauto ระบุ URL เฉพาะ (i use /dev/null/[title-raw];): แม้ว่าโหนดจะไม่ถูกเผยแพร่ก็จะมีนามแฝง url เป็นของตัวเอง ดังนั้นในตัวอย่างของคุณถ้าคุณสร้างครั้งแรกโหนดผี 'เกี่ยวกับเรา' และจากนั้นหน้ามุมมอง 'เกี่ยวกับเรา' URL ที่สองจะได้รับการexample.com/about-us-0becose example.com/about-usได้รับมาจากหนึ่งผี ( แต่คุณสามารถกำหนดเส้นทางด้วยตนเอง)


3

คุณสามารถใช้ระบบการเข้าถึงโหนดและใช้ views3 คุณจะไม่สามารถปิดใช้งาน sql rewrite บนการตั้งค่าการสืบค้นได้ดังนั้นคุณจึงสามารถปิดการใช้งานระบบการเข้าถึงโหนดในมุมมองนี้


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

เข้าถึงเนื้อหาโมดูลจะตรงกับความต้องการของคุณได้อย่างสมบูรณ์แบบ

โมดูลนี้ช่วยให้คุณสามารถจัดการการอนุญาตสำหรับประเภทเนื้อหาตามบทบาทและผู้เขียน ช่วยให้คุณระบุมุมมองที่กำหนดเองแก้ไขและลบสิทธิ์สำหรับเนื้อหาแต่ละประเภท คุณสามารถเปิดใช้งานตามการตั้งค่าการเข้าถึงเนื้อหาเพื่อให้คุณสามารถกำหนดการเข้าถึงสำหรับแต่ละโหนดเนื้อหา

นอกจากนี้ยังมีเอกสารที่ดีที่จะช่วยคุณเริ่มต้นใช้งาน


2

ถ้าคุณ "รวมเนื้อหา" โหนดต้องอยู่ไม่สามารถเข้าถึงได้แล้วพิจารณาการปิดกั้น / โหนด / * บนเว็บเซิร์ฟเวอร์ "ตั้ง = / โหนด / *" ระดับ ค่าเริ่มต้นปฏิเสธการเข้าถึง / โหนดทั้งหมด ค่าเริ่มต้นอนุญาตให้เข้าถึงโหนดที่ได้รับเส้นทางพา ธ อัตโนมัติเช่น / หน้า

(รหัสผ่าน. htaccess พื้นฐานสำหรับไดเรกทอรีย่อยเป็นวิธีที่ดีในการปิดกั้นการค้นหาดัชนีโดยโปรแกรมรวบรวมข้อมูลภายนอกเช่นกัน)

คุณไม่สามารถรับประกันได้ว่าโหนดจะไม่สามารถเข้าถึงได้ผ่านโมดูลที่สนับสนุนซึ่งจะติดตั้งในอนาคตหรืออย่างใดอย่างหนึ่งที่คุณยังไม่เข้าใจอย่างสมบูรณ์ (ผลการค้นหารายชื่อมุมมองเริ่มต้นภาพรวมหมวดหมู่อนุกรมวิธาน ... )

มันคือสิ่งที่โหนดมีไว้สำหรับ

ความเป็นส่วนตัวของ "เนื้อหาที่รวมอยู่" ของคุณนั้นสำคัญกับคุณหรือไม่? ถ้าเป็นเช่นนั้น ...

  1. ทุกสิ่งที่มี URL จะถูก Google เข้าใช้งานในที่สุด

    เพราะเสิร์ชเอนจิ้นไม่ต้องพึ่งพาลิงค์ไปเดอร์เพียงอย่างเดียว พวกเขายังประเมินความคิดเห็นของเบราว์เซอร์ ฯลฯ ไม่มี robots.txt หรือ pathauto globalredirect โมดูล rabbithole จะช่วยให้คุณนอนหลับอย่างสงบ หากสามารถเข้าถึงโหนดได้โหนดจะถูกทำดัชนี อาจเป็นเพราะเบราว์เซอร์ / แอดออนของคุณเอง

  2. พิจารณาถ้า "เนื้อหาที่จะรวมถึง" จริงๆควรจะโหนด , ถ้าไม่มีใครควรใช้เป็นหน้า ?

    หาก "เนื้อหาที่รวมอยู่" ของคุณจะถูกเก็บไว้ใน mini-panel / block / snippet / bean / ... แสดงว่าคุณมีความเสี่ยงต่ำกว่าที่เคยปรากฏในรายการหรือปรากฏเป็นหน้าเว็บที่มี URL อัตโนมัติคุณ ไม่ทราบเกี่ยวกับยัง (หน้าภาพรวมของอนุกรมวิธานการค้นหามุมมอง ... )


0

จำกัด โหนดหน้าดูโมดูลไม่ตรงกับสิ่งที่คุณต้องการ

จากคำอธิบายโมดูล:

คุณเคยใช้ nodetype สไลด์โชว์ที่คุณต้องการเผยแพร่ แต่ไม่ต้องการให้โหนดสามารถเข้าถึงได้ด้วยตัวเองโดยใช้เส้นทาง node / XXX โมดูลนี้เหมาะสำหรับคุณ!

พร้อมด้วยโมดูลนี้คุณสามารถ จำกัด การเข้าถึงของโหนดโหมดมุมมองเพื่อให้คุณไม่สามารถเข้าถึงโหนดบนfullnode/XXX

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.