2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Vue router を使った時の GitHub Pages での 404 対策

Last updated at Posted at 2021-12-11

どんな問題?

vue-router は SPA なので / 以外のページを直接叩きに行くと 404 する。

自分で nginx なんかでデプロイする場合は try_files /index.html とかで綺麗に解決するが、 GitHub Pages だとこの設定はできない(たぶん)。

普通に / 以外のページに行ったあと F5 するだけで 404 するのでけっこうキツい。

追記

GitHub Pages では SPA ではなくMPA にするほうがよさそう。

MPA にすれば複数 index.html ができるので以下の対策は必要ない。

対策方法

GitHub Pages は 404.html があると使ってくれるので、 404.html にスクリプトを仕込んでそこから /#/hoge/fuga/ へリダイレクトする(これで / がロードされる)。
/ 側では Vue が動く前に URL を /hoge/fuga/ へ書き換える。

実装例

public/404.html をいい感じに作って <head> の中に下を追加。

    <script>
      (function (l) {
        l.replace(l.origin + "/#" + l.pathname);
      })(window.location);
    </script>

次に、 public/index.html<head> の中に下を追加。

    <script>
      (function (l) {
        if (l.hash) {
          window.history.replaceState(null, null, l.hash.slice(1));
        }
      })(window.location);
    </script>

さいごに

上の実装例だとステータスコードは 404 になってしまう。
実際 naca-nyan.github.io/converter/ とかを開いて Dev Tool を見ると 404 が出る。うーん。
もっといい実装あったら教えてください。
MPA にしたので Not Found しなくなりました。

参考にした記事

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?