web-dev-qa-db-ja.com

異なるクエリ文字列を使用して同じURLでリダイレクトできるようにするにはどうすればよいですか?

私はDrupal 7.を使用しています。異なるクエリ文字列を含む約120のURLがあり、Drupalでは、異なるクエリ文字列/パラメータを使用して同じURLにリダイレクトできません

例えば:

このURL blog/its-time-occupy-it?page = 1blog/its-time-occupy-itにリダイレクトする必要があります。以下の例を参照してください。

(from url) blog/about-author?page=1  -> (to url) blog/about-author
(from url) blog/about-author?page=2  -> (to url) blog/about-author
(from url) blog/about-author?page=3  -> (to url) blog/about-author

この問題を解決するための解決策を提供するための提案はありますか?

3
Saeed Afzal

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

{ "rules_redirect_all_node_aliases" : {
    "LABEL" : "Redirect all node aliases",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:path" ],
          "match" : "blog\/about-author?page",
          "operation" : "starts"
        }
      }
    ],
    "DO" : [
      { "redirect" : { "url" : "blog\/about-author" } }
    ]
  }
}

blog\/about-author?pageで始まるすべてのパスをblog/about-authorという名前のパスにリダイレクトします。したがって、これは「このようなパスをリダイレクトしますが、クエリ文字列/パラメータが異なるため、同じURLにリダイレクトされます」 (あなたの質問のように...)。

独自のサイトでこのルールを試すには、上記のルールコード全体をコピーして、「インポート」機能で作成した独自のサイトの新しいルールに貼り付けます(ルールUIが有効になっている場合に使用可能)。

しかし、待ってください、もっとあります...

pageがURL引数として指定されているかどうかを確認することもできます。そして、そのような引数に指定された実際の値(あなたの質問のように:12または3の後のpage=)を ルール 。そのためには、 Rules URL Argument モジュールを使用します。これについて(プロジェクトページから)の引用です:

... URL引数に基づく2つのルール条件を提供します。

  • uRL引数が存在するかどうかを確認します。
  • uRL引数の値を比較します。

また、URL引数の値をルールの新しい変数として使用できるようにするアクションも提供します。

新しく提供されたルールのアクションと条件は、ルール構成インターフェースの「URL引数」条件とアクショングループの下にあります。

使用方法の例については、 問題#1686360のコメント# を参照してください。これは、「についての量です」URLに量を渡す、つまり、site/content/node -title?amount = 10または/ node-title?= amount:10 "。その関連部分は次のとおりです。

  • ルールに「URL引数が存在するかどうかを確認」条件を追加し、「ARGUMENT」値を「amount」に設定します。
  • ルールに「URL引数の値を提供する」アクションを追加し、「URL引数名」の値を「量」に設定し、「提供された変数」セクションで「URLからの引数-変数名」を次のように設定します。 「amount_from_url」。

これで、このルールの他のアクションの変数「amount-from-url」として金額の値を使用できるようになります。

3
Pierre.Vriens