web-dev-qa-db-ja.com

node / 12を介したノードへのアクセスを制限し、content / sometitleのようなパスを介してアクセスを許可する方法は?

問題:ノード番号www.example.com/node/12を使用した直接ノードアクセスを制限し、匿名ユーザーにpathautoエイリアスwww.example.com/content/sometitleを使用したアクセスを許可します。このユーザーは Pathauto タイトルパスのみを使用してノードのすべてのコンテンツを表示できますが、snoofへのノード番号は使用できません。

主に私は匿名ユーザーをターゲットにしたいと思います。管理者は常にすべてにアクセスできます。

簡単に言えば、すべてのnode/Number paths(notnode/add/ContentTypeホームページまたはアクセスなしページと言います。

5
suneel

Global Redirect モジュールは、あなたが望む(そしてそれ以上の)ことを行います。

... URLのクリーンアップ機能が有効になっているかどうかを確認し、現在のURLが 'unclean'メソッドではなくcleanメソッドを使用してアクセスされていることを確認します。

クリーンなURL機能が有効になっている場合は、node/xxをcontent/your-contentなどにリダイレクトします。

7
herci

オプション1:ルールモジュールの使用

Rules モジュールを使用すると、次のようなルールを実装できます。

{ "rules_check_url" : {
    "LABEL" : "Disallow node/* access",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:url" ],
          "match" : "node\/\\d+$",
          "operation" : "regex"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : {
          "message" : "Sorry, URLs like [site:current-page:url] are not allowed around here ...",
          "type" : "error"
        }
      },
      { "redirect" : { "url" : "no_access" } }
    ]
  }
}

上記のルールでは、(まだ)匿名ユーザーのみに「アクション」を適用することは考慮されていません。ただし、Rulesモジュールに少し慣れている人にとっては、これは簡単に追加できる「条件」です...

独自のサイトでこのルールを試すには、上記のルールコード全体をコピーして、「インポート」機能で作成した独自のサイトの新しいルールに貼り付けます。次に、さらに編集/調整して、自分の環境に合わせます(たとえば、「Sorry、...」メッセージが表示されます)。

オプション2:ウサギの穴モジュールの使用

Rabbit Hole モジュールの使用を検討してください。以下は、プロジェクトページからの抜粋です。

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

  • アクセス拒否ページを配信します。
  • 見つからないページを配信します。
  • 任意のパスまたは外部URLへのページリダイレクトを発行します。
  • または単にエンティティを表示します(通常の動作)。

これは、バンドルごとおよびエンティティごとに構成可能です。特定の役割がウサギの穴を完全に上書きできるようにする権限もあります。

助言:

上記の両方のオプションから、ルールベースのソリューションを選択します...すでにルールがインストールされている可能性があるため、またはまだインストールする必要がある場合は、同じように解決するために他の多くのユースケースを発見しますルールモジュール(おそらく Flag モジュールですぐに補完されます...)

5
Pierre.Vriens

Drupal Apacheのmod_rewriteルールと一緒に渡すことができます。これをルートに配置します。htaccessファイルを<IfModule mod_rewrite.c>ディレクティブ。

RewriteRule ^node/([0-9]+)$ / [R=301,L]

すべてのwww.example.com/node/*をwww.example.comにリダイレクトします。別のパスにリダイレクトする場合は、単一の「/」文字をそれに追加します。

4
Shawn Conn