前提・実現したいこと
助けてください。create-react-appを用いて作成したアプリをbuildしたら、404エラーが出たり遷移がうまくいかなかったりでどうしようもありません。
開発環境では問題なく動いていました。
検索で似たケースがたくさん出てきたので、react routerを用いているのが原因なのだとは思うのですが、対処法を片っ端からやってみても一向に改善しません…。
最終的にはさくらvpsを使って、https://mysite.comでトップページが表示されるようにしたいです。
遷移問題に関してはGitHub Pagesでも同様の現象が起こります。
Router箇所のソースコードは以下になります。問題の詳細は次項へ続きます。
react
1import React, { useState, useEffect, useRef } from 'react' 2import { BrowserRouter, Route, Switch } from 'react-router-dom' 3... 4function AppRouter() { 5 ... 6 const ROUTER_BASENAME = process.env.NODE_ENV === 'development' ? '/' : '/mysite'; 7 const history = createBrowserHistory({ basename: ROUTER_BASENAME }) 8 ... 9 return ( 10 <BrowserRouter history={history}> 11 ... 12 <Switch> 13 <Route path="/" component={TopPage} exact={true}/> 14 <Route component={TopPage}/> 15 <Route path="/description" component={DescriptionContainer}/> 16 <Route path="/news" component={NewsContainer}/> 17 <Route path="/nid=:id" component={NewsItemDetail}/> 18 <Route path="/contact" component={FormContainer}/> 19 </Switch> 20 ... 21 </BrowserRouter> 22 ) 23}
発生している問題・エラーメッセージ
問題1
①さくらvpsの/var/www/htmlで以下コマンドを行い、mysiteディレクトリを作成した。
git clone -b gh-pages https://github.com/username/mysite
※buildフォルダのみを置くには一番楽かと思い、gh-pagesをcloneしていますが、まずここからおかしいでしょうか…。
②/etc/httpd/conf/httpd.confファイルにて、ドキュメントルートを/var/www/html/mysiteに変更した。(https://mysite.comでトップページにアクセスできるはず)
結果
Not Foundにはならないものの真っ白になり何も表示されない。画像のように複数のファイルが404になってしまっているようです。
ちなみに、/var/www/htmlでディレクトリを作成せずにcloneを行った場合(以下コマンド)も同じ結果になりました。htmlディレクトリ名をmysiteに変更しても同じでした。
git clone -b gh-pages https://github.com/username/mysite .
問題2
上記②を諦めた(https://mysite.com/mysiteでトップページにアクセスできるはず)
結果
https://mysite.com/mysiteにアクセスしたら、問題なくトップページが表示された。
しかし、<Link>で他のページに遷移した際、mysite.com/mysite/contact に遷移してほしいのに、 mysite.com/contact に遷移される。トップページに戻るとmysite.comに遷移される。
コンテンツは問題なく表示されるが、リロードしたら404エラーになる。
※GitHub Pagesでも、 username.github.io/contact に遷移されます。
react
1<Link to="/contact"><p>お問い合わせ</p></Link>
試したこと
・Router→BrowserRouter createHistory→createBrowserHistory に変更する
・BrowserRouterでbasenameを設定する
・<Route component={TopPage}/> や <Route path="/index.html" component={TopPage}/> を追加する
・package.jsonに "homepage": "./" や "homepage": "/mysite" を追加する
・react-router-domやnode_modulesを最新版にする
・.gitignoreから/buildの記述を削除する
・https://maku.blog/p/9u8it5f/ ここのサイトを参考にさせていただき、404.htmlなど作成したがうまくいかず
補足情報(FW/ツールのバージョンなど)
package.jsonで関係ありそうな箇所になります。
react
1"version": "0.1.0", 2"react-router-dom": "^5.2.0",
不足情報などありましたら教えてください。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー