React RouterでSPA(シングルページアプリケーション)を開発している際、リンクをクリックすると問題なく遷移するのに、URLを直接叩くと404エラーになってしまう…そんな経験はありませんか?この記事では、その問題を解消する方法を紹介します。
目次
問題の概要
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のフォーマットに従っています。いいねや共有を頂ける内容になっていると思います。