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


51

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

そのため、ノードへのアクセスを制限し、Drupalの検索結果から削除し、Googleがそのノードを選択しないようにする必要があります。助言がありますか?


現在drupal 6を使用していますが、6と7の間で異なる場合は、両方に答えるのが役立つと思います
-Chaulky

少数のノードだけが心配な場合は、robots.txtファイルに追加してGoogle検索から除外しませんか?
タングレナ

これはよくある誤解です。robots.txtは、検索エンジンによるサイトのインデックス作成を妨げるものではなく、検索エンジンによるサイトのクロールを防ぐものです。誰かがあなたのサイトのページにリンクする場合、Googleはそのリンクをたどり、必要に応じてページをインデックス化します。あなたがないようにしたい場合はインデックスを作成しますが、ロボットのメタタグを使用する必要がある、すなわち:<META NAME =「ROBOTS」値=「NOINDEX」/>
ルネ・

回答:


28

これは、Panelsモジュールの良いユースケースのように思えます必要な場合、パネルページのアクセスルール。詳細については、doに関するこの投稿を参照してください。


これは、私が望んでいることを正確に行うように見え、きれいでシンプルな方法で...チュートリアルが付属しています(素敵なリンク)!
-Chaulky

これは、Rabbit Holeモジュールソリューションと比較して過剰ではありませんか?これに選ばれた答えとなる追加の利点はありますか?
マリオ・アワド

1
@MarioAwadまあ、1つは、この質問に答えてから1年以上が経つまで、ラビットホールモジュールは存在しませんでした。当時、Panelsは最良のソリューションでしたが、誰かが既にパネルをインストールしている場合、それが最良のソリューションだと思います。そうでない場合、Rabbit Holeがより良い軽量のソリューションかもしれません。
coderintherye

@nowarninglabel良いヒントのように聞こえます。ありがとう。この説明を答えに追加して、将来の来訪者にとってより良いものにする必要があるかもしれません。乾杯。
マリオ・アワド

33

ラビット・ホールのモジュールは、この機能を提供します。

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

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


現在、Drupal 6バージョンがあります。
mpdonadio

優れた、クリーンでシンプルなソリューション。
jamix

1
ニース、これは、それだけを行うのでcontent_typeノードへの直接アクセスを防止したい場合、パネルモジュール(このユースケース)よりも優れています!
ラルザン

13

1つのオプションは、ノードを決して公開しないが、コンシューマページに公開ステータスを無視させることです。したがって、この例では、「About」ビューは「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またはカスタムテーブルを使用)またはvariableに格納された非表示ノードのリストを使用することです


@ mongolity404素敵な投稿、良い情報。他にもいくつかのアイデアをくれました。しかし、なぜコミュニティwikiなのでしょうか?
-Chaulky

誰かが提案したオプションのコードサンプルを提供したいと思う場合に、回答コミュニティwikiを作成しました...
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によるこのチュートリアルによるhttp応答でURLリダイレクト(これらのノードをadmin以外のすべてのユーザーに隠す)を行い、クローラーによるインデックスなしノードが処理されますノード無インデックスモジュール。これは、パレットと子ノードの関係がない場合でも機能します。 チュートリアルへのリンク:


4

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

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


3

それらのノードを「未公開」に設定してから、ビューに「node published:no」というフィルターを追加します。

seoの注意点として、これらの「ゴースト」ノードのカスタムコンテンツタイプを作成し、pathautoに特定のURLを指定することをお勧めします(iを使用し/dev/null/[title-raw]ます):ノードが未公開の場合でも、独自のURLエイリアスがあります。あなたが最初の「私たちについて」ゴーストノードを作成し、「私たちについて」ビューページ場合ので、あなたの例では、第2のURLは次のようになりますexample.com/about-us-0becose example.com/about-usゴースト1(ただし、手動でパスを設定することができます)からとられています


3

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


3

ルールモジュールを使用して実行できます。
+「コンテンツが表示されている」イベントで新しいルールを作成します。
+いくつかの条件を追加します。例えば、ユーザーにはロールがあります:匿名、パスには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

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


2

コンテンツアクセスモジュールは、完全にあなたの要件を、スイートなります。

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

また、開始に役立つ優れたドキュメントもあります。


2

「含まれるコンテンツ」ノードにアクセスできないようにする必要がある場合は、Webサーバーの「location = / node / *」レベルで / node / *をブロックすることを検討してください。デフォルトでは、すべての/ nodeへのアクセスが拒否されます。デフォルトでは、/ pagesなどのpath-autoパスを受け取ったノードへのアクセスを許可します。

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

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

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

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

  1. URLを持つすべてのものは、最終的にはgoogleによってヒットされます。

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

  2. 誰もページとしてアクセスする必要がない場合、「含めるコンテンツ」を本当にノードする必要があるかどうかを再検討しますか?

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


0

制限ノードページビューモジュールは、正確に何をしたいん。

モジュールの説明から:

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.