Ionicでルーティング先のURLを直接叩くと404になる問題の解決方法
Ionic v4向けの記事です。
IonicでTab型のアプリを作る場合 ionic serve でプレビューしているときは
http://localhost:8100/tabs/tab1
と直接URL指定してもTab1の内容が表示されるのですが、 ionic buildしてwwwディレクトリをデプロイした場合は404になってしまいます。 また、本来やってはだめですがbuttonなどで飛び先をhref="/tabs/tab2"と指定した場合も404になってしまいます。 ここはちゃんと
<ion-button routerLink="/faq" routerDirection="root">FAQ</ion-button>
のようにrouteLinkを使いましょう。 ここまでやっても/tabs/tab1に直接飛ぶだけでなく、正常に開いた状態でページをリロードしても404になります。
なぜか。
Ionicはv4からルーティングがAngularに寄ってきたのですが、まだ特殊なのが必ず/index.htmlを開く前提になっているため、/tabs/tab1/index.htmlを開こうとしてしまうのです。そこで、.htaccessに下記のようにRewriteを指定してやるとうまくいきます。
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.html [L] </IfModule>