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

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

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

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

React.js

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

Q&A

0回答

361閲覧

[Nginx, Webpack, React]/aaa/bbb のような深さが2次以上のパスにアクセスできない

sezubo

総合スコア4

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

React.js

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

0グッド

0クリップ

投稿2019/09/21 18:24

編集2019/09/25 10:23

Reactのルーティング周り、あるいはNginxの設定周りでハマってしまい、調べたのですがピンとくる情報がなかったので、質問させていただきます。
どうかよろしくお願いいたします。。。

前提・実現したいこと

Reactで見た目を作り、react-router-domでルーティングするアプリケーションを、webpackでビルドしてNginxで表示するようにしています。

例えば/user/editといったパスへのアクセスで、ユーザー編集画面を表示できるようにしたいのですが、現状できません。

/user/loginといったパスの深さが1次のものは期待通りのページが表示されますが、/user/editのような深さが2次以上のページはうまく表示されません。

コンポーネントのディレクトリ構成は以下のようになっています。

├── src │   ├── App │   │   ├── Footer │   │   │   └── index.jsx │   │   ├── Header │   │   │   └── index.jsx │   │   ├── Home │   │   │   └── index.jsx │   │   ├── Login │   │   │   └── index.jsx │   │   └── User │   │   ├── Confirm │   │   │   └── index.jsx │   │   ├── Edit │   │   │   └── index.jsx │   │   └── index.jsx

react-router-dom"でルーティングを制御しているsrc/index.jsxは以下のようになっております。
パスとコンポーネントの対応付は、別で配列でもって、.map() でそれぞれルーティングを設定しています。

src/index.jsx

1 2const routes = [ 3 { 4 path: "/home", 5 component: Home, 6 name: "ホーム" 7 }, 8 { 9 path: "/user/edit", 10 component: UserEdit, 11 name: "プロフィール編集" 12 }, 13 14(略) 15 16 {routes.map((route, index) => ( 17 <Route 18 exaxt 19 key={index} 20 path={route.path} 21 pageName={route.name} 22 component={route.component} 23 /> 24 ))} 25

Webpackの設定は以下です。
変な設定にはなっていないと思うのですが。。。

const path = require("path"); const HtmlWebpackPlugin = require("html-webpack-plugin"); const Dotenv = require("dotenv-webpack"); const src = path.resolve(__dirname, "src"); const dist = path.resolve(__dirname, "dist"); module.exports = { entry: ["@babel/polyfill", src + "/index.jsx"], output: { path: dist, publicPath: "/", filename: "[name]-[hash].bundle.js" }, module: { rules: [ { enforce: "pre", test: /.(js|jsx)$/, exclude: /node_modules/, use: [ { loader: "eslint-loader", options: { formatter: require("eslint/lib/cli-engine/formatters/stylish") } } ] }, { test: /.(js|jsx)$/, exclude: /node_modules/, loader: "babel-loader" }, { test: /.svg$/, use: [ { loader: "babel-loader" }, { loader: "react-svg-loader", options: { jsx: true } } ] } ] }, resolve: { extensions: [".js", ".jsx"] }, plugins: [ new HtmlWebpackPlugin({ template: src + "/public/index.html", publicPath: "/", filename: "index.html" }), new Dotenv({ path: "./.env" }) ] };

Nginxの設定は以下です。
ここも変なことはしていないと思っているのですが、なんとなくtry_files $uri $uri/ /index.html;のあたりがまずいのかなと思っていたりします。。。

server { listen 80; server_name localhost; location / { root /var/www/html; index index.html; try_files $uri $uri/ /index.html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }

発生している問題・エラーメッセージ

エラーメッセージは発生せず、/user/editにアクセスすると、Userコンポーネントが表示されてしまいます。(UserEditコンポーネントが表示されてほしい)

どのようにすれば、/user/edit でUserEditコンポーネントを表示することができるでしょうか?
何卒よろしくお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問