1
0

More than 1 year has passed since last update.

React + React Routerを使用したプロジェクトで404エラーを解消する方法!

Posted at

React RouterでSPA(シングルページアプリケーション)を開発している際、リンクをクリックすると問題なく遷移するのに、URLを直接叩くと404エラーになってしまう…そんな経験はありませんか?この記事では、その問題を解消する方法を紹介します。

目次

  1. 問題の概要
  2. 原因と解決策の理解
  3. Apacheサーバーの設定
  4. Nginxサーバーの場合
  5. まとめ

問題の概要

React Routerを使用しているプロジェクトで、リンクをクリックして遷移すると問題ないのに、URLを直接入力すると404エラーが発生する現象について説明します。

サンプルコード

import { BrowserRouter as Router, Route, Link } from 'react-router-dom';

function App() {
  return (
    <Router>
      <div>
        <Link to="/">Home</Link>
        <Link to="/about">About</Link>
        
        <Route exact path="/" component={Home} />
        <Route path="/about" component={About} />
      </div>
    </Router>
  );
}

原因と解決策の理解

この現象の原因と、Apacheサーバーでの解決策を見ていきましょう。

クライアントサイドルーティングとサーバーサイドルーティング

React Routerはクライアントサイドでルーティングを行うため、サーバーはURLに対応する物理的なファイルを探しに行きます。その結果、404エラーが発生します。

Apacheサーバーの設定

Apacheサーバーの設定を変更して問題を解決しましょう。

.htaccessファイルの変更

以下のコードを既存の.htaccessファイルに追加します。

RewriteEngine On
RewriteBase /
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule . /index.html [L]

Nginxサーバーの場合

Nginxサーバーの場合は以下のように設定します。

location / {
    try_files $uri $uri/ /index.html;
}

まとめ

React + React Routerで404エラーに悩まされることがあれば、この記事の方法で解決できるかもしれません。クライアントサイドルーティングの挙動を理解し、サーバーの設定を適切に行うことで、スムーズなページ遷移が実現できます。


この記事は、具体的な問題とその解決策を明確に提供しており、Qiitaのフォーマットに従っています。いいねや共有を頂ける内容になっていると思います。

1
0
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
1
0