Azure Static Web AppsでAngularのルーティングが404になる
こんにちは。b0cchiです。
体重と日々のやる気は反比例するということを実感している今日この頃です。
さて、本日はAzure Static Web AppsでAngularのルーティングが404になる問題が発生しました。
おそらくAngular
に限らず、React
やVue
などのSPA
全般で同様の問題が発生するかと思いますので、解決方法を共有します。
現象
何も考えずに、Angular
の成果物をAzure Static Web Apps
にデプロイしたところ、/
にアクセスすると表示されるのですが、/hoge
にアクセスすると404
が返ってきました(下図)。
もちろんローカルの開発環境では、ばっちりルーティングされるのにも関わらずです(下図)。
この原因はルーティング(っぽい動き)をクライアント側で行っているためなんですが、じゃぁAzure Static Web Appではどうやるのかってことですね。
解決方法
結論としては、package.json
と同階層にstaticwebapp.config.json
というファイルを生成して、以下の記述をしたら解決します。
{
"navigationFallback": {
"rewrite": "/index.html"
}
}
上記のファイルを追加して、再度デプロイ後に、ブラウザでアクセスすると下図のように開発環境と同じようにルーティングがされて表示されていることがわかります。
まとめ
SPA
をAzure Static Web Apps
にデプロイする際は、staticwebapp.config.json
を生成して、navigationFallback
を設定しましょう。
最初はstatic web apps用にルーティングファイル作らないかんのか?と思いましたが、全然そんなことはなくて、ちゃ〜んと用意してありました。
蛇足
何かに似てるな〜と思ったら、nginx
の設定にそっくりですね。
つまり、nginxと同様のことをAzure Static Web Appsがやってくれるって感じでしょうか。