web-dev-qa-db-ja.com

ユーザーや検索エンジンから直接アクセスしてはならないノードを非表示にするにはどうすればよいですか?

他の場所に表示されるが直接表示されるべきではないコンテンツを単に含むノードがある場合があることを発見しました。つまり、node/1234にアクセスする必要はありませんが、ノード1234のコンテンツは別の場所に表示する必要があります。たとえば、ビューを使用して、タブ付きコンテンツの概要ページを作成します。 「About Me」、「About Us」、「About About」のページがあります。これらはすべて、ビューを使用してタブ付きの単一ページに表示されます。したがって、他のページのタブが表示されないため、「About Us」ノードに直接アクセスしてほしくありません。同時に、このノードへの直接リンクをGoogleに提供したくないので、ユーザーがビュー(つまり、タブ)からのみアクセスできるようにアクセスを制限します。

したがって、ノードへのアクセスを制限し、Drupal検索結果から削除し、Googleがそれを取得しないことを確認する必要があります。何か提案はありますか?

49
Chaulky

これは、 Panelsモジュール の良いユースケースのように聞こえます。ノードページをオーバーライドするパネルを作成し、ユーザーを保証する方法でパネルのコンテキストを設定できるためです。表示するページと、必要に応じてパネルページのアクセスルールを表示します。詳細については、 d.o。のこの投稿を参照してください

27
coderintherye

ウサギの穴 モジュールがこの機能を提供します。

ウサギの穴は、エンティティが独自のページで表示されているときに何が起こるかを制御する機能を追加するモジュールです。

カルーセルに表示される画像コンテンツタイプのように、独自のページに表示されるべきではないコンテンツタイプがある可能性があります。 Rabbit Holeは、node/xxxを介して、このノードが独自のページでアクセスできないようにすることができます。

32
Pierre Buyle

1つのオプションは、ノードを公開しないで、消費者ページに公開ステータスを無視させることです。したがって、この例では、「About」ビューは「About-xxx」ノードの公開ステータスを無視するだけです。ノードは公開されていないため、権限のないユーザーはノードにアクセスできず、検索エンジンによってインデックスが作成されるべきではありません。

別の解決策は hook_nodeapi('view') / hook_node_view() 実装を使用して drupal_goto()を発行することです または drupal_access_denied() 権限のないユーザーがノードページにアクセスした場合。 hook_nodeapi() / hook_node_view() は、ノードページを表示するときだけでなく、多くの場合に使用されることに注意してください。

hook_menu_alter() を使用して、ノードページのアクセスコールバックを変更し、hiddenノードへのアクセスを拒否することもできます。

おそらく、ハードコードされたノードIDに基づいてフィルタリングを行うのではなく、ノードのカスタムフィールド(CCK/Field APIまたはカスタムテーブルを使用)またはhiddenノード 変数に格納

12
Pierre Buyle

Drupal 7の場合、 Rabbit Hole がこの機能を提供します。

ウサギの穴は、エンティティが独自のページで表示されているときに何が起こるかを制御する機能を追加するモジュールです。

これは、エンティティが独自のページで表示されているときに何が起こるかを制御する複数のオプションを提供することで機能します。あなたはする能力を持っています

  1. アクセス拒否ページを配信します。

  2. 見つからないページを配信します。

  3. 任意のパスまたは外部URLへのページリダイレクトを発行します。

  4. または単にエンティティを表示します(通常の動作)。

方法 :

有効化ラビットホールノードサブモジュール次に、Drupal [〜 #〜]コード[〜#〜]

6
niksmac

解決しました。最初にピエール・バイルの回答を試しましたが、ノードを非公開にすると、適切にアクセスできなくなり、それらのノードは役に立たなくなります。私の場合、親ノードと子ノードがあり、(管理目的の)子ノードのみが非表示にされ、クローラーによってインデックス付けされません。私がページマネージャーでやったことは、URLリダイレクト(管理者以外のすべてのユーザーに対してこれらのノードを非表示にする)を作成しました http://www.wunderkraut.com/1 クローラーによるインデックスなしのノードは Node no-index module によって処理されます。これは、paret-childノードの関係がない場合でも機能します。 チュートリアルへのリンク:

5
pinueve

Drupal 7では、 hook_node_access() を使用することもできます。これは、D7の通常のフックであり、すべてのノードタイプのすべてのモジュールで実装できます。その後、ユーザーが自分のノード/ nidでノードを表示しようとしている場合は、アクセスを拒否できます。

また、hook_query_node_access_alter()を実装してチェックを追加し、検索結果でノードを非表示にする必要がある場合もあります。これで十分な場合もあり、hook_node_access()は必要ありません。また、D6ではクエリを変更できるため、D6でも機能する可能性がありますが、D7ではクエリビルダーによりはるかに簡単です。

3
Berdir

それらのノードを「非公開」として設定し、ビューで「ノード公開:いいえ」フィルターを追加します。

Seoのメモとして、これらの「ゴースト」ノードのカスタムコンテンツタイプを作成し、pathautoに特定のURLを指定することをお勧めします(私は/dev/null/[title-raw];を使用します):ノードが非公開の場合でも、独自のURLエイリアスなので、例では、最初にゴーストノード「about us」を作成し、次にビューページ「about us」を作成すると、2番目のURLはexample.com/about-us-0 becose example.com/about-usが取得されますゴーストから(ただし、パスを手動で設定できます)

2
Strae

ルールモジュールを使用して実行できます。
+「コンテンツが表示されました」イベントで新しいルールを作成します。
+いくつかの条件を追加します。例:ユーザーに役割があります:匿名、パスにURLエイリアスがあります:node/xyz(これは匿名ユーザーに制限するノードです)。必要な場合は、「and」または「or」条件を追加してください。
+別のページにリダイレクトするアクションを作成するか、何か他のことを行います。これは私があなたのためにエクスポートしたサンプルコードです

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

あらゆる種類のノードアクセスシステムを使用でき、views3を使用できます。そこでは、クエリ設定でsql rewriteを無効にできないため、このビューでノードアクセスシステムを無効にすることができます。

2
Daniel Wehner

私はあなたが望むことを達成する最も簡単な方法はページマネージャー(Ctools)を使用することであり、本当に簡単に使用できると思います、あなたがしなければならないのはどこにリダイレクトするかを指定することです(この場合、あるノードから別のノードへ)

1
Nicolas_ii

コンテンツアクセス モジュールは、要件に完全に適合します。

このモジュールを使用すると、ロールおよび作成者ごとにコンテンツタイプの権限を管理できます。これにより、各コンテンツタイプのカスタム表示、編集、および削除権限を指定できます。オプションで、コンテンツごとのアクセス設定を有効にして、各コンテンツノードのアクセスをカスタマイズできます。

良いドキュメント もあり、使い始めるのに役立ちます。

1
AjitS

「含まれるコンテンツ」ノードにアクセスできない状態を維持する必要がある場合は、webserver "location =/node/*" levelで/ node/*をブロックすることを検討してください。デフォルトでは、すべての/ノードへのアクセスを拒否します。デフォルトでは、/ pagesのようなパス自動パスを受け取ったノードへのアクセスを許可します。

(サブディレクトリの基本的な.htaccessパスワードは、外部クローラーによる偶発的な検索インデックス作成もブロックする適切な方法です。)

将来インストールされる可能性があるコントリビュートされたモジュール、またはまだ完全に理解していないモジュールを介してノードがアクセス可能にならないことを保証することはできません。 (検索結果、リスト、デフォルトビュー、分類カテゴリの概要...)

それがノードの目的です。

あなたの「含まれるコンテンツ」のプライバシーはあなたにとって重要ですか?もしそうなら、それから...

  1. RLを含むすべてのものは最終的にgoogleにヒットします。

    検索エンジンはリンクスパイダーだけに依存しないからです。また、ブラウザのフィードバックなども評価します。robot.txt、pathauto、globalredirect、rabbitholeモジュールは、安らかに眠るのに役立ちません。ノードにアクセスできる場合は、インデックスが作成されます。多分あなた自身のブラウザ/アドオンによって。

  2. 「インクルードされるコンテンツ」が実際にノードである必要があるかどうかを再考する誰もページとしてアクセスする必要がない場合

    「含まれているコンテンツ」がミニパネル/ブロック/スニペット/ bean/...内に保存されている場合、リストに表示されたり、ページとして表示されたりするリスクははるかに低くなりますwith知らない自動URLまだです。 (分類の概要ページ、検索、ビュー...)

1
user18099

Restrict Node Page View モジュールは、まさにあなたが望むものを実行します。

モジュールの説明から:

公開する必要があるスライドショーノードタイプを使用したことがありますが、node/XXXパスを使用してノード自体にアクセスしたくないですか?このモジュールはあなたのためです!

このモジュールを使用すると、ノードのfull表示モードへのアクセスを制限できるため、node/XXXのノードにアクセスできません。

0
user72672