사용자 및 검색 엔진에서 직접 액세스해서는 안되는 노드를 숨기려면 어떻게합니까?


51

다른 곳에 표시 될 콘텐츠가 포함 된 노드가 있지만 직접 보지 않아야하는 경우가 있습니다. 즉, 아무도 node / 1234로 이동해서는 안되지만 노드 1234의 내용은 다른 곳에 표시되어야합니다. 예를 들어, 뷰를 사용하여 탭 콘텐츠가있는 정보 페이지를 만듭니다. 따라서 "자기 소개", "회사 소개"및 "회사 소개"페이지가 있습니다. 이 모든 것이보기를 사용하여 탭이있는 단일 페이지에 표시됩니다. 따라서 사람들이 다른 페이지의 탭을 볼 수 없기 때문에 "About Us"노드로 직접 이동하는 것을 원하지 않습니다. 동시에 Google이 사람들 에게이 노드에 대한 직접 링크를 제공하지 않기를 원하며 액세스를 제한하여 사용자가보기 (예 : 탭)를 통해서만 액세스 할 수 있도록하고 싶습니다.

따라서 노드에 대한 액세스를 제한하고 Drupal 검색 결과에서 노드를 제거하고 Google이 선택하지 않도록해야합니다. 어떤 제안?


저는 현재 drupal 6을 사용하고 있지만 6과 7이 다른 경우 두 가지 모두에 답하는 것이 도움이 될 것이라고 생각합니다
Chaulky

몇 개의 노드 만 염려된다면 robots.txt 파일에 추가하여 Google 검색에서 제외 시키지 않겠습니까?
Tangurena

이것은 일반적인 오해입니다. robots.txt는 검색 엔진이 귀하의 사이트 를 색인하는 것을 막지 않으며 검색 엔진이 귀하의 사이트를 크롤링 하지 못하게 합니다. 누군가가 사이트의 페이지에 링크하면 Google은 링크를 따라 페이지를 원할 경우 색인을 생성합니다. 인덱싱 을 방지 하려면 ROBOTS 메타 태그를 사용해야합니다. 예 : <meta name = "ROBOTS"value = "NOINDEX"/>
René

답변:


28

이것은 노드 페이지를 대체하는 패널을 만들 수 있고 사용자가 원하는 페이지를 볼 수 있도록 보장하는 방식으로 패널의 컨텍스트를 설정할 수 있기 때문에 패널 모듈 의 좋은 사용 사례처럼 들립니다. 필요한 경우 패널 페이지에 대한 액세스 규칙. 자세한 내용은 이 게시물을 참조하십시오.


이것은 내가 원하는 것을 정확하게하고 깨끗하고 간단한 방법으로 ... 심지어 튜토리얼과 함께 제공됩니다 (좋은 링크) !!
Chaulky

이것은 Rabbit Hole 모듈 솔루션에 비해 과잉이 아닌가? 선택한 답변을 얻을 수있는 추가 이점이 있습니까?
Mario Awad

1
@MarioAwad 글쎄, Rabbit Hole 모듈은이 질문에 대답 한 후 1 년이 지나도 존재하지 않았습니다. 당시 패널은 최고의 솔루션이었습니다. 누군가 이미 패널을 설치 한 경우 여전히 최고의 솔루션이라고 생각합니다. 그렇지 않으면 Rabbit Hole이 더 가벼운 솔루션 일 수 있습니다.
coderintherye 2013 년

@nowarninglabel 좋은 팁처럼 들립니다. 감사. 미래의 출근자를 위해 더 나은 답을 얻으려면이 설명을 대답에 추가해야 할 수도 있습니다. 건배.
Mario Awad

33

토끼 구멍 모듈은이 기능을 제공합니다.

Rabbit Hole은 엔터티를 자체 페이지에서 볼 때 발생하는 상황을 제어하는 ​​기능을 추가하는 모듈입니다.

회전 목마에 표시되는 이미지 콘텐츠 유형과 같이 자체 페이지에 표시해서는 안되는 콘텐츠 유형이있을 수 있습니다. Rabbit Hole은 node / 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 / Field API 또는 사용자 정의 테이블 사용) 또는 변수에 저장된 숨겨진 노드 목록을 사용 하는 것입니다 .


@ mongolity404 좋은 게시물, 좋은 정보. 다른 것들에 대한 아이디어를주십시오. 그러나 왜 커뮤니티 위키인가?
Chaulky

누군가 내가 제안한 옵션에 대한 코드 샘플을 제공하고 싶다고 생각하는 경우 커뮤니티 커뮤니티 위키를 만들었습니다.
Pierre Buyle

7

Drupal 7의 경우 Rabbit Hole 에서이 기능을 제공합니다.

Rabbit Hole은 엔터티를 자체 페이지에서 볼 때 발생하는 상황을 제어하는 ​​기능을 추가하는 모듈입니다.

이것은 엔티티가 자체 페이지에서 볼 때 발생하는 일을 제어하는 ​​여러 옵션을 제공함으로써 작동합니다. 당신은 능력이

  1. 액세스 거부 페이지를 제공하십시오.

  2. 페이지를 찾을 수없는 페이지를 제공하십시오.

  3. 경로 나 외부 URL로 페이지 리디렉션을 실행하십시오.

  4. 또는 단순히 엔터티를 표시합니다 (정규 동작).

어떻게 :

Rabbit Hole 노드 하위 모듈 활성화 Drupal CODE의 모든 양식과 관련된 구성 섹션을 얻습니다.


6

해결되었습니다. 먼저 Pierre Buyle 답변을 시도했지만 노드를 게시 취소하면 제대로 액세스 할 수 없으며 해당 노드가 쓸모 없게됩니다. 필자의 경우 부모 및 자식 노드가 있으며 크롤러가 색인을 생성하지 않고 숨기고 관리하는 자식 노드 만 있습니다. 페이지 관리자로 내가 한 일은 http://www.wunderkraut.com/ 1 에 의해이 tuturial에 따라 http 응답으로 URL 리디렉션 (이 노드를 관리자 이외의 모든 사용자에게 숨기고)으로 만들었으며 크롤러의 색인이없는 노드가 처리됩니다. 에 의해 노드 노 인덱스 모듈 . Paret-Child 노드 관계가없는 경우에도 작동합니다. 튜토리얼 링크 :


4

Drupal 7에서도 hook_node_access () 를 사용할 수 있어야합니다 . 이것은 D7의 일반 후크이며 모든 노드 유형에 대해 모든 모듈에서 구현할 수 있습니다. 그런 다음 사용자가 자신의 노드 / 니드에서 노드를 보려고하면 액세스를 거부 할 수 있습니다.

또한 hook_query_node_access_alter ()를 구현하고 검색 결과에서 노드를 숨기려면 검사를 추가해야합니다. 이것만으로도 충분할 수 있으며 hook_node_access ()가 필요하지 않습니다. 쿼리를 변경할 수도 있기 때문에 D6에서도 작동 할 수 있지만 쿼리 작성기 때문에 D7에서는 훨씬 더 쉽습니다.


3

해당 노드를 '미공개'로 설정 한 다음보기에서 '노드 공개 : 아니오'필터를 추가하십시오.

참고로, 해당 '고스트'노드에 대한 사용자 정의 컨텐츠 유형을 작성하고 pathauto에 특정 URL을 제공하도록 지시하는 것이 좋습니다 (i;; /dev/null/[title-raw]). 노드가 게시되지 않은 경우에도 자체 URL 별명을 갖습니다. 그래서 당신의 예제에서 당신은 먼저 유령 '우리에 대해'노드와 '우리에 대해'보기 페이지를 만들 경우, 두 번째의 URL이됩니다 example.com/about-us-0becose example.com/about-us유령 하나에서 촬영되었습니다 (단, 수동으로 경로를 설정할 수 있습니다)


3

모든 종류의 노드 액세스 시스템을 사용하고 뷰를 사용할 수 있습니다 3. 쿼리 설정에서 SQL 다시 쓰기를 비활성화 할 수 없으므로이보기에서 노드 액세스 시스템을 비활성화 할 수 있습니다.


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

"포함 된 컨텐츠"노드에 액세스 할 수없는 상태로 유지하려면 웹 서버 "location = / node / *" 레벨 에서 / node / * 차단을 고려하십시오 . 기본적으로 모든 / node에 대한 액세스를 거부합니다. 기본적으로 / pages와 같은 경로 자동 경로를받은 노드에 액세스 할 수 있습니다.

하위 디렉토리의 기본 .htaccess 비밀번호는 외부 크롤러의 우발적 인 검색 색인 생성을 차단하는 적절한 방법입니다.

향후 설치 될 기고 모듈 또는 아직 완전히 이해하지 못하는 모듈을 통해 노드에 액세스 할 수 없다는 것을 절대 보장 할 수 없습니다. (검색 결과, 목록, 기본보기, 분류 범주 개요 ...)

바로 노드입니다.

"포함 된 콘텐츠"의 개인 정보가 중요합니까? 그렇다면 ...

  1. URL이있는 모든 것은 결국 Google에 의해 영향을받습니다.

    검색 엔진은 링크 스파이더에만 의존하지 않기 때문입니다. 그들은 또한 브라우저 피드백 등을 평가합니다. robot.txt 또는 pathauto, globalredirect, rabbithole 모듈은 안심하고 잠을 자도록 도와줍니다. 노드에 액세스 할 수 있으면 인덱싱됩니다. 아마 당신의 브라우저 / 애드온에 의해

  2. 재검토 "에 포함되어야하는 내용"경우 정말 노드해야한다 , 아무도이 페이지로 액세스하는 경우는 ?

    "포함 된 컨텐츠"가 미니 패널 / 블록 / 스 니펫 / bean / ... 내부에 저장되면, 컨텐츠가 나열 될 위험이 훨씬 적거나 자동 URL이 있는 페이지 표시됩니다. 에 대해 아직 모른다 . (택시 학 개요 페이지, 검색,보기 ...)


0

제한 노드 페이지 뷰 모듈은 당신이 원하는 것을 정확히 않습니다.

모듈 설명에서 :

게시해야하는 슬라이드 쇼 노드 유형을 사용한 적이 있지만 node / XXX 경로를 사용하여 자체적으로 노드에 액세스 할 수 없도록하려는 적이 있습니까? 이 모듈은 당신을위한 것입니다!

이 모듈을 사용하면 노드의 full보기 모드에 대한 액세스를 제한 할 수 있으므로의 노드에 액세스 할 수 없습니다 node/XXX.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.