質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Router

Routerは、異なるネットワーク同士を相互に接続するための通信機器。インターネットでのデータを自動的に振り分け、一つのインターネット回線を複数のコンピュータで使用することが可能です。DHCPによりIPアドレスを自動的に割振りすることもできます。

さくらのVPS

さくらのVPSは、さくらインターネット社が提供するVPS(仮想専用サーバー)です。高速なSSDの選択や複数台構成も可能。利用者に応じた柔軟なプランが用意されています。大規模システムにも対応可能なスケーラビリティを備えたホスティングサービスです。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

3920閲覧

React Routerのページ遷移が本番環境だとうまくいきません。404エラーも出ます。

退会済みユーザー

退会済みユーザー

総合スコア0

Router

Routerは、異なるネットワーク同士を相互に接続するための通信機器。インターネットでのデータを自動的に振り分け、一つのインターネット回線を複数のコンピュータで使用することが可能です。DHCPによりIPアドレスを自動的に割振りすることもできます。

さくらのVPS

さくらのVPSは、さくらインターネット社が提供するVPS(仮想専用サーバー)です。高速なSSDの選択や複数台構成も可能。利用者に応じた柔軟なプランが用意されています。大規模システムにも対応可能なスケーラビリティを備えたホスティングサービスです。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/01/16 19:02

前提・実現したいこと

助けてください。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",

不足情報などありましたら教えてください。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/01/16 21:31

VPS で apache をお使いならこちらの設定でいけるのでは? https://tech-it.r-net.info/program/react/271/ なお、参考にしたページの 404.html を作る方法は、Web サーバーの設定を変更できない GitHub ページ用のハック (回避策) です。
退会済みユーザー

退会済みユーザー

2021/01/17 02:10

ご回答ありがとうございます。 教えていただいた設定も記入漏れで試していた…のですが、改めて見直してみたところ、httpd.confファイルで.htaccessを有効にできていませんでした…。 AllowOverride None を All に書き換えたところ、mysiteがサブディレクトリの場合は結果変わらずでしたが、ドキュメントルートにした場合は無事描写でき、遷移も問題なくできました! 自分一人では気づけなかったと思います。お早い的確なアドバイスをくださり本当にありがとうございました。 また、参考urlの認識違いも教えてくださりありがとうございます。全く読み取れていませんでした…。apacheの設定をいじれるVPSと、変更できないGitHub Pagesでの対処法の違いということなのですね。Webサーバーの勉強もっと頑張ります。
guest

回答1

0

ベストアンサー

「質問への追記・修正の依頼」欄の方法で解決いたしました。
ありがとうございました。

投稿2021/01/23 13:21

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問