はじめに
このページでは、Redirect Webアプリでルールを作成する一般的なユースケースについて説明します。
(ルールの設定の詳細については、「ルールの設定」ページで学ぶこともできます。)
ケース1:別のウェブサイトを開く
あなたがTwitterに夢中で、うっかりTwitterを開いてしまったらInsight Timerで瞑想することにしたとします。そのためのルールを作成してみましょう!
ステップ1:「リダイレクト元」を設定する
まず、アプリの「ルールを編集」画面で「リダイレクト元」セクションを設定する必要があります。ターゲットは https://twitter.com/
で始まるURLです。
この場合、ワイルドカードモードで以下のパターンを指定できます。
https://twitter.com/*
ワイルドカードモードでは、*
は任意のもの(=0文字以上の文字)に一致することを意味します。
しかし、ちょっと待ってください。twitter.com
はx.com
に名前が変更されました。twitter.com
をx.com
に置き換えるだけでも良いですが、新しい所有者がいつ心変わりして元に戻すかは誰にもわかりません。したがって、twitter.com
とx.com
の両方をターゲットにしましょう。
そのためには、ワイルドカードから正規表現に切り替え、これをパターンとして設定します。
https://(twitter|x).com/.*
(twitter|x)
:twitter
とx
の両方をターゲットにします。(|
はパイプと呼ばれます。).*
: これはワイルドカードの*
と同じです。より具体的には、.
は任意の1文字を意味し、*
はこの記号の前の文字が任意の回数繰り返されることを意味するため、結果として任意のものに一致します。
正規表現は少し複雑ですが、慣れてしまえば強力なツールになります。正規表現パターンがどのように機能するかを分析するための練習場として、RegExrを使用することをお勧めします。
正規表現では、(twitter|x).com
の.
も任意の1文字として扱われます。そのため、(twitter|x).com/.*
は、例えばtwitter1com/
やx_com/
にも一致してしまいます。
これを避けるには、(twitter|x)\.com/.*
に変更できます。\
は特殊文字をエスケープするために使用されます。
ただし、一般的なインターネット環境ではそのようなURLは存在しません。したがって、お好みであれば.
を特殊文字のままにしておくこともできます。このルールはあなた自身の使用のためなので、適切だと思うように実装してください。
ステップ2:「リダイレクト先」を設定する
単純に、以下のようにURLを指定します。
https://insighttimer.com/saraauster/guided-meditations/calm
これで、Twitterにアクセスすると、Redirect Webがあなたを瞑想へ誘います!
ケース2:URLからクエリパラメータを削除する
例えば、example.com
のURLにクエリパラメータsource=twitter
があり、これを削除して自分を匿名化したいとします。
この場合、「キャプチャグループ処理」オプションが最も簡単な方法です。
- リダイレクト元:
https://example.com/*
(ワイルドカード) - リダイレクト先:
$0
- キャプチャグループ処理:
- グループ:
$0
- 処理: 出現箇所の置換
- ターゲット:
&?source=[^&]*
- 置換: (なし)
- テキストパターン: 正規表現
- ターゲット:
- グループ:
このルールは次のように機能します。
https://example.com/?source=twitter
↪ https://example.com/?
https://example.com/?hello=world&source=twitter&foo=bar
↪ https://example.com/?hello=world&foo=bar
さらに多くのパラメータを削除したい場合は、さらに処理を追加してください。
ケース3:URLにクエリパラメータを追加する
デフォルトではモバイルレイアウトを表示するexample.com
というウェブサイトがあるが、デスクトップレイアウトを好むとします。幸いなことに、そのウェブサイトは、どのレイアウトを表示するかを指定するためのlayout
クエリパラメータをサポートしています。layout=desktop
を自動的に追加するルールを作成しましょう。
おそらく、以下のように定義できると思うかもしれません。
- リダイレクト元:
https://example.com/.*
(正規表現) - リダイレクト先:
$0?layout=desktop
$0
はターゲットURLを参照します。example.com/hello
にアクセスしようとすると、example.com/hello?layout=desktop
にリダイレクトされます。この機能は置換と呼ばれます。
ワイルドカードモードでも、内部的に正規表現に変換されるため、置換が利用可能です。
しかし、これらの設定にはいくつかの問題があります。
問題1:無限ループ
現在の設定では、https://example.com/.*
がhttps://example.com/hello?layout=desktop
もターゲットにするため、無限リダイレクトループが発生します。
この場合、リダイレクトなしでアクセスできるように、正規表現で次のような除外URLパターンを指定できます。
.*[&?]layout=[^&]*.*
.*
: 任意のものに一致[&?]
:&
または?
のどちらかに一致[^&]*
:&
以外の任意のものに一致
問題2:既存のパラメータを適切に処理できない
ターゲットURLに既にexample.com/hello?theme=dark
のような他のクエリパラメータがある場合、宛先はexample.com/hello?theme=dark?layout=desktop
(URLに?
が2つ)となりますが、パラメータは&
でのみ結合できます。特殊文字としての?
はパラメータの最初にのみ許可されます。したがって、それは有効なパラメータとして扱われません。
この場合、設定を次のように変更します。
- リダイレクト元:
(https://example.com/[^?]*)(\?(.*))?
- リダイレクト先:
$1?layout=desktop&$3
順を追って見ていきましょう。
(https://example.com/[^?]*)
:?
の前の文字までの部分に一致します。[^?]*
は?
以外の任意のものに一致します。- これは
()
で囲まれているため、後で$1
で参照できます。
(\?(.*))?
:?
で始まる文字列に一致します。これはクエリパラメータを意味します。- これはパターンの最後にある
?
量指定子によって空文字列にも一致します。?
量指定子は0回または1回一致を意味します。 - 外側の
()
と内側の()
は、後で$2
と$3
で参照できます。
- これはパターンの最後にある
RegExrが詳細を理解するのに役立つかもしれません。
RegExrでは、/
を\
でエスケープしないとエラーが表示されます。エスケープすることもできますが、Redirect WebはAppleが提供する別のエンジンを使用しており、エスケープは必要ありません。
これは完璧な解決策ではありません。なぜなら、example.com/hello
をexample.com/hello?layout=desktop&
にリダイレクトしてしまい、URLの最後に不要な&
が含まれるためです。一般的には大きな問題ではありませんが、これを削除したい場合は「キャプチャグループ処理」を使用できます。
結論として、最終的な出力は次のとおりです。
- リダイレクト元:
(https://example.com/[^?]*)((\?(.*))?)
(正規表現) - リダイレクト先:
$1?layout=desktop$3
- 除外URLパターン:
.*[&?]layout=[^&]*.*
(正規表現) - キャプチャグループ処理:
- グループ:
$3
- 処理: 出現箇所の置換
- ターゲット:
\?(.*)
- 置換:
&$1
- ターゲット:
- グループ:
これは単なる一例です。各問題を処理するために複数のルールを作成することもできます。その方がはるかにシンプルになる場合もあります。