Làm cách nào để ẩn các nút không nên truy cập trực tiếp từ người dùng và công cụ tìm kiếm?


51

Tôi đã thấy rằng đôi khi tôi có một nút chỉ chứa nội dung sẽ được hiển thị ở một nơi khác, nhưng không nên xem trực tiếp. Đó là, không ai nên đi đến nút / 1234, nhưng nội dung trong nút 1234 sẽ được hiển thị ở một nơi khác. Ví dụ: tôi tạo một trang về nội dung được gắn thẻ bằng cách sử dụng lượt xem. Vì vậy, có các trang "Giới thiệu về tôi", "Giới thiệu" và "Giới thiệu về chúng". Tất cả những thứ này được hiển thị trong một trang duy nhất với các tab sử dụng Chế độ xem. Vì vậy, tôi không muốn mọi người truy cập trực tiếp vào nút "Giới thiệu" vì sau đó họ sẽ không thấy các tab cho các trang khác. Đồng thời, tôi không muốn Google cung cấp cho mọi người một liên kết trực tiếp đến nút này, tôi muốn giới hạn quyền truy cập để người dùng chỉ có thể truy cập thông qua Chế độ xem (tức là tab).

Vì vậy, tôi cần hạn chế quyền truy cập vào nút, xóa nút đó khỏi kết quả tìm kiếm Drupal và đảm bảo Google không nhận nút đó. Bất kỳ đề xuất?


Tôi hiện đang sử dụng drupal 6, nhưng nếu nó khác nhau giữa 6 và 7, tôi nghĩ sẽ rất hữu ích khi trả lời cho cả hai
Chaulky

Nếu bạn lo lắng về chỉ một vài nút, tại sao không thêm chúng vào tệp robot.txt để loại trừ chúng khỏi các tìm kiếm của Google?
Tangurena

Đây là một quan niệm sai lầm phổ biến. robot.txt không ngăn công cụ tìm kiếm lập chỉ mục trang web của bạn, nó ngăn công cụ tìm kiếm thu thập dữ liệu trang web của bạn. Nếu ai đó liên kết đến một trang trên trang web của bạn, Google sẽ theo liên kết và lập chỉ mục trang nếu muốn. Nếu bạn muốn ngăn chặn việc lập chỉ mục, bạn cần sử dụng thẻ meta ROBOTS, tức là: <meta name = "ROBOTS" value = "NOINDEX" />
René

Câu trả lời:


28

Điều này đối với tôi giống như một trường hợp sử dụng tốt cho mô-đun Bảng vì bạn có thể tạo các bảng sẽ ghi đè lên các trang nút và có thể đặt bối cảnh cho bảng theo cách để đảm bảo người dùng nhìn thấy trang bạn muốn họ nhìn thấy cũng như quy tắc truy cập cho các trang bảng điều khiển nếu bạn cần chúng. Để biết thêm chi tiết, xem bài viết này về làm


điều này có vẻ để làm chính xác những gì tôi muốn, và theo cách đơn giản, gọn gàng ... thậm chí còn đi kèm với một hướng dẫn (liên kết đẹp) !!
Chaulky

Đây không phải là một quá mức so với giải pháp mô-đun Rabbit Hole sao? Có những lợi ích bổ sung cho điều này làm cho nó là câu trả lời được lựa chọn?
Mario Awad

1
@MarioAwad Vâng, đối với một mô-đun Rabbit Hole thậm chí không tồn tại cho đến hơn một năm sau khi tôi trả lời câu hỏi này. Vào thời điểm đó, Tấm là giải pháp tốt nhất, tôi vẫn nghĩ đó là giải pháp tốt nhất nếu ai đó đã cài đặt bảng, nếu không thì Rabbit Hole có thể là một giải pháp nhẹ tốt hơn.
coderintherye

@nowarninglabel Nghe có vẻ là một mẹo hay. Cảm ơn. Có lẽ bạn nên thêm sự làm rõ này vào câu trả lời để làm cho nó tốt hơn cho những người đến sau. Chúc mừng.
Mario Awad

33

Các Rabbit Hole mô-đun cung cấp tính năng này.

Rabbit Hole là một mô-đun bổ sung khả năng kiểm soát những gì sẽ xảy ra khi một thực thể đang được xem tại trang của chính nó.

Có lẽ bạn có một loại nội dung không bao giờ được hiển thị trên trang của chính nó, giống như một loại nội dung hình ảnh được hiển thị trong băng chuyền. Rabbit Hole có thể ngăn nút này truy cập được trên trang của chính nó, thông qua nút / xxx.


Hiện tại đã có phiên bản Drupal 6.
mpdon Arena

Tuyệt vời, một giải pháp sạch sẽ và đơn giản.
jamix

1
Thật tuyệt, cái này tốt hơn mô-đun bảng điều khiển (cho trường hợp sử dụng này) nếu bạn chỉ muốn ngăn truy cập trực tiếp vào nút content_type vì nó chỉ làm điều đó!
Larzan

13

Một tùy chọn có thể là không bao giờ xuất bản nút nhưng có trang người tiêu dùng bỏ qua trạng thái xuất bản của họ. Vì vậy, trong ví dụ của bạn, chế độ xem "Giới thiệu" của bạn có thể bỏ qua trạng thái xuất bản của các nút "Giới thiệu về xxx". Vì các nút không được công bố, người dùng không được ủy quyền không thể truy cập chúng và chúng không nên được công cụ tìm kiếm lập chỉ mục.

Một giải pháp khác là sử dụng hook_nodeapi('view')/ hook_node_view()triển khai để phát hành drupal_goto()hoặc drupal_access_denied()khi trang nút được truy cập bởi người dùng không được ủy quyền. Xin lưu ý rằng hook_nodeapi()/ hook_node_view()được sử dụng trong nhiều trường hợp và không chỉ khi xem trang nút.

hook_menu_alter()cũng có thể được sử dụng để thay đổi cuộc gọi lại truy cập của các trang nút để từ chối truy cập vào các nút ẩn .

Điều tốt nhất có lẽ không phải là dựa trên cơ sở lọc trên ID nút được mã hóa cứng mà là sử dụng trường tùy chỉnh trên nút (sử dụng CCK / API API hoặc bảng tùy chỉnh) hoặc danh sách các nút ẩn được lưu trữ trong một biến .


@ mongolity404 bài đăng đẹp, thông tin tốt. Đã cho tôi ý tưởng cho một vài thứ khác. Nhưng tại sao cộng đồng wiki?
Chaulky

Tôi đã đưa ra câu trả lời wiki cộng đồng của mình trong trường hợp ai đó cảm thấy muốn cung cấp mẫu mã cho các tùy chọn mà tôi đề xuất ...
Pierre Buyle

7

Đối với Drupal 7, Rabbit Hole cung cấp tính năng này.

Rabbit Hole là một mô-đun bổ sung khả năng kiểm soát những gì sẽ xảy ra khi thực thể en đang được xem tại trang của chính nó.

Điều này hoạt động bằng cách cung cấp nhiều tùy chọn để kiểm soát những gì sẽ xảy ra khi thực thể đang được xem tại trang của chính nó. Bạn có khả năng

  1. Cung cấp một trang bị từ chối truy cập.

  2. Cung cấp một trang không tìm thấy trang.

  3. Phát hành chuyển hướng trang đến bất kỳ đường dẫn hoặc url bên ngoài.

  4. Hoặc đơn giản là hiển thị thực thể (hành vi thông thường).

Làm thế nào để :

Kích hoạt mô hình con nút Rabbit Hole Sau đó, chúng ta sẽ có phần cấu hình được liên kết với mọi hình thức trong Drupal CODE


6

Giải quyết. Đầu tiên tôi đã thử trả lời Pierre Buyle, nhưng nếu bạn không công bố một nút, nó không thể được propper truy cập và các nút đó trở nên vô dụng. Trong trường hợp của tôi, tôi có các nút cha và con, chỉ các nút con (cho mục đích quản trị viên) là các nút bị ẩn và KHÔNG được lập chỉ mục bởi các trình thu thập thông tin. Những gì tôi đã làm với trình quản lý trang đã thực hiện chuyển hướng url (ẩn các nút này cho tất cả người dùng trừ quản trị viên) bằng phản hồi http theo hướng dẫn này bởi http://www.wunderkraut.com/ 1 và các nút không có chỉ mục của trình thu thập dữ liệu được xử lý bằng tay bởi mô-đun Node không có chỉ mục . Điều này sẽ hoạt động ngay cả khi bạn không có mối quan hệ nút paret-child. Liên kết đến hướng dẫn:


4

Trong Drupal 7, cũng có thể sử dụng hook_node_access () , đây là một hook bình thường trong D7 có thể được thực hiện bởi tất cả các mô-đun cho tất cả các loại nút. Sau đó, bạn có thể từ chối truy cập nếu người dùng đang cố gắng xem nút trên nút / nid của chính mình.

Bạn cũng có thể cần phải thực hiện hook_query_node_access_alter () và thêm một kiểm tra ở đó để ẩn nút trong kết quả tìm kiếm. Điều này thậm chí có thể là đủ cho riêng nó và bạn không cần hook_node_access (). Và nó thậm chí có thể hoạt động trong D6 vì bạn cũng có thể thay đổi truy vấn ở đó nhưng nó dễ dàng hơn nhiều trong D7 vì trình tạo truy vấn.


3

Đơn giản chỉ cần đặt các nút đó là 'chưa được xuất bản', sau đó, trong chế độ xem, thêm nút lọc 'nút được xuất bản: không'.

Như seo lưu ý, là một cách thực hành tốt để tạo loại nội dung tùy chỉnh cho các nút 'ma' đó và bảo pathauto cung cấp cho họ các url cụ thể (tôi sử dụng /dev/null/[title-raw];): ngay cả khi nút không được xuất bản, nó sẽ có bí danh url riêng, như vậy trong ví dụ của bạn nếu bạn tạo đầu tiên nút ma 'về chúng tôi', và sau đó trang điểm 'về chúng tôi', url của thứ hai sẽ được example.com/about-us-0becose example.com/about-usđã được lấy từ một con ma (tuy nhiên, bạn có thể thiết lập các đường dẫn bằng tay)


3

Bạn có thể sử dụng bất kỳ loại hệ thống truy cập nút nào và sử dụng lượt xem3. Ở đó bạn không thể vô hiệu hóa ghi lại sql trên các cài đặt truy vấn và vì vậy bạn có thể vô hiệu hóa hệ thống truy cập nút trên chế độ xem này.


3

Bạn có thể làm bằng cách sử dụng các mô-đun quy tắc.
+ Tạo quy tắc mới với sự kiện "Nội dung được xem".
+ Thêm một vài điều kiện ví dụ: Người dùng có (các) vai trò: ẩn danh, Đường dẫn có bí danh URL: node / xyz (đây là nút mà bạn muốn giới hạn cho người dùng ẩn danh). Nhớ thêm điều kiện "và" hoặc "hoặc" nếu cần.
+ Tạo hành động để chuyển hướng đến một trang khác hoặc làm một cái gì đó khác. Đây là mã mẫu mà tôi đã xuất cho bạn

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

Tôi nghĩ cách dễ nhất để thực hiện những gì bạn muốn là sử dụng Trình quản lý trang (Ctools), rất đơn giản để sử dụng, tất cả những gì bạn phải làm là chỉ định nút nào để chuyển hướng ở đâu (trong trường hợp này, từ nút này sang nút khác)


2

Các truy cập nội dung mô-đun sẽ phù hợp với yêu cầu của bạn một cách hoàn hảo.

Mô-đun này cho phép bạn quản lý quyền cho các loại nội dung theo vai trò và tác giả. Nó cho phép bạn chỉ định chế độ xem tùy chỉnh, chỉnh sửa và xóa quyền cho từng loại nội dung. Tùy chọn bạn có thể bật cho mỗi cài đặt truy cập nội dung, do đó bạn có thể tùy chỉnh quyền truy cập cho từng nút nội dung.

Nó cũng có một tài liệu tốt để giúp bạn bắt đầu.


2

Nếu "Nội dung bao gồm" của bạn nút cần phải ở lại không thể tiếp cận, sau đó xem xét chặn / node / * trên webserver "vị trí = / node / *" mức . Từ chối truy cập mặc định cho tất cả / nút. Mặc định cho phép truy cập vào các nút nhận được đường dẫn tự động như / trang.

(Mật khẩu .htaccess cơ bản cho các thư mục con là một cách hợp lý để chặn lập chỉ mục tìm kiếm tình cờ bởi các trình thu thập dữ liệu bên ngoài.)

Bạn không bao giờ có thể đảm bảo rằng một nút sẽ không thể truy cập được thông qua một mô-đun đóng góp sẽ được cài đặt trong tương lai hoặc một nút mà bạn chưa hiểu đầy đủ. (Kết quả tìm kiếm, danh sách, chế độ xem mặc định, tổng quan về danh mục phân loại ...)

Đó là những gì các nút dành cho.

Sự riêng tư của "nội dung được bao gồm" của bạn có quan trọng với bạn không? Nếu vậy, thì ...

  1. Tất cả mọi thứ có URL cuối cùng sẽ bị tấn công bởi google.

    Bởi vì các công cụ tìm kiếm không chỉ dựa vào các liên kết nhện. Họ cũng đánh giá phản hồi của trình duyệt, v.v. Không có robot.txt, hoặc pathauto, globalredirect, rabbithole sẽ giúp bạn ngủ yên. Nếu nút có thể được truy cập, thì nó sẽ được lập chỉ mục. Có thể bởi trình duyệt / addons của riêng bạn.

  2. Xem xét lại nếu "nội dung được bao gồm" thực sự nên là một nút , nếu không ai nên truy cập nó như một trang ?

    Nếu "nội dung được bao gồm" của bạn sẽ được lưu trữ bên trong một bảng điều khiển nhỏ / khối / đoạn / đậu / ..., thì bạn có nguy cơ bị liệt kê thấp hơn nhiều hoặc từng xuất hiện dưới dạng trang có URL tự động không biết về , được nêu ra. (trang tổng quan về phân loại, tìm kiếm, lượt xem ...)


0

Các Restrict Node trang Xem mô-đun thực hiện chính xác những gì bạn muốn.

Từ mô tả mô-đun:

Bạn đã bao giờ sử dụng một gật đầu trình chiếu mà bạn cần phải được xuất bản nhưng không muốn chính nút đó có thể truy cập được bằng cách sử dụng đường dẫn nút / XXX? Module này là dành cho bạn!

Với mô-đun này, bạn có thể hạn chế quyền truy cập vào fullchế độ xem của nút , vì vậy bạn không thể truy cập vào nút trên node/XXX.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.