私は過去数日間、次の問題に苦しんでいます。CDNの性質と新しいルールの手動レビューのため、新しいルールを展開するのに最大4時間かかります。
次のトピックで説明するように、私は現在、Angularアプリケーションをストレージアカウントにデプロイしています。このアカウントにはblobコンテナと呼ばれるcdn
があります。
このblobコンテナのroot内で、私のangularプロジェクトからのdist
フォルダー全体がCIセットアップを介してコピーされました。
CDNプロファイルも設定されており、_Origin-path
_と呼ばれる_/cdn
_を指します。
残念ながら、現在進行中の issue があり、デフォルトのファイルに直接アクセスすることはできません。
私が欲しいのは、すべての着信トラフィックを私のAngularアプリケーションから_index.html
_ファイルにリダイレクトすることです。これは Angularのルーティング を満たすためです。
さらに、特定のURLを書き換えることなく、静的ファイル(画像など)のリクエストをすべて通過させたいと思います。
この問題に関するさまざまな投稿を見てきましたが、どの回答も私のケースをカバーしていないか、期待した結果が得られなかったようです。
現在、VerizonのAzure CDNのrulesengines機能を使用しています。
パターンに関しては、コメントに記載されているものも含めて、 次の記事 に記載されているすべてのパターンを使用しました。
また、他のさまざまな記事やスタックオーバーフローの記事を見つけるために少なくとも2日を費やしましたが、私の場合はどれもうまくいきませんでした。
さらに、独自の正規表現パターンも作成しましたが、テスト環境では機能しましたが、CDNにデプロイされると機能します。
私は通常、次のいずれかの結果になりました。
https://myFancyWebsite.azureedge.net
_はURLを_index.html
_に書き換えず、httpエラー_404
_を受け取りますindex.html
_にリダイレクトされますが、URLパスを追加すると機能しなくなります_https://myFancyWebsite.azureedge.net/login/callback
_-もう一度_404
_を使い始めるとすぐにhttpエラー_/login/callback
_https://myFancyWebsite.azureedge.net/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn/cdn ....
_でURLを_431
_のようなものに書き換えます。Microsoftの公式 documentation も私の場合は役に立ちませんでした。
Angularアプリケーションをストレージアカウントにデプロイしているのは私が最初ではなく、誰かが私と同じ問題で実行されていると確信しています。
現時点では、ストレージアカウント全体の展開から離れることを確実に考えているため、正しい方向を示す情報に感謝しています。
次のsource
パターン_((?:[^\?]*/)?)($|\?.*)
_は、ここの article でも言及されており、少なくともトップレベルドメインの_index.html
_ファイルへの書き換えを処理できます。
残念ながら、_https://myFancyWebsite.azureedge.net/login/callback
_から_https://myFancyWebsite.azureedge.net/index.html
_にリダイレクトするための追加のパターンが必要です。
現在、正規表現パターンを1日に1〜2回更新していますが、テスト環境では機能しますが、デプロイすると機能しなくなります。 Azure CDNがトップレベルドメインの後にURLに何かを追加していると思い始めましたが、それを確認する方法がわかりません。
https://regex101.com/r/KK0jCN/2
私たちは3025年を書いていますが、たとえば次のパターンがトップドメインのURL書き換えを処理していない理由はまだわかりません。
[^?.]*(\?.*)?$
と入力します。このパターンは、.
を含むURLパスをキャッチしますが、クエリ文字列に含まれているかどうかは関係ありません。Origin_path/document.ext
と入力します。これは難しい部分です。パスは原点ルートを基準にしています。たとえば、CDNエンドポイントのオリジンパスが/Origin_path
で、index.html
にリダイレクトする場合は、Origin_path/index.html
と入力します。これは、CDNがAzureストレージアカウントによってサポートされており、オリジンがコンテナーを指している場合に常に当てはまります。あなたの要件のために、私は私の側でこの問題をテストしました。私のテストによると、次のURL書き換えルールを活用してみることができます。
ソースパターン:(http[s]?://[^\?/#]+)(/(?!images)(?!scripts)[^\?#]*)?($|[\?#].*)
宛先パターン:$1/index.html$3
注:他のファイル(.ico、.txt、.js、.cssなど)を正しくロードするには、それらを新しい仮想ディレクトリに移動する必要がありますBLOBコンテナのルートの代わりに。たとえば、画像ファイルをcdn\images
に移動し、JavaScriptファイルをcdn\scripts
に移動すると、正規表現は関連する仮想フォルダーを無視します。
さらに、Azure Web Appを使用して静的Webサイトをホストし、無料の価格階層または共有階層を選択できます。これにより、インスタンスあたり月額$ 9.49の費用がかかります。あなたが従うことができる詳細 価格計算機 。
更新:
Justinの回答に基づいて、この問題を確認したところ、Blobストレージのオリジンタイプの場合、URL書き換えのSource
とDestination
がblobストレージエンドポイントに対するリクエストについて話していることがわかりました。したがって、blobエンドポイントのリクエストパスとクエリ文字列に対して正規表現を設定する必要があります。
Justin Gouldは、すべてをcdn/index.html
に書き換えるための答えを提供しました。あなたのシナリオに基づいて、私は私のルールをテストしました、そしてそれは私の側で働くことができました。
テスト: