実現したいこと
- React+Viteで作成したサイトの下層ページを直接URL指定した際に発生する404エラーの解消
前提
-
React+Viteでjsx言語を用いてSPAサイトを作成しています。
-
GitHub Pagesに、Custom GitHub Actions Workflowsを使用する設定でデプロイしています。
-
/ページを表示してからのページ遷移には成功しています。
-
パッケージ管理にはnpmを使用しています。
-
ルーティングにはreact router domを使用しています。
発生している問題・エラーメッセージ
下層のページを直接URL指定(または更新)した時にのみ404エラーが発生しています。
改善に繋がりそうなソースコード
src/App.jsx
1import './style.css' 2 import {Header} from "./components/Header"; 3 import {Dev} from "./components/Dev"; 4 import {Skill} from "./components/Skill"; 5 import {Profile} from "./components/Profile"; 6 import {MiniMemo} from "./components/MiniMemo"; 7 import {Tobaccost} from "./components/Tobaccost"; 8 import {Footer} from "./components/Footer"; 9 import {Bottom} from "./components/Bottom"; 10 import { BrowserRouter as Router, Routes, Route } from "react-router-dom"; 11 12 13 export const App = () => { 14 15 return ( 16 <Router> 17 <div className="container"> 18 19 <Header /> 20 21 <Routes> 22 <Route path='/WorksTest/' element={<Dev />} /> 23 <Route path='/WorksTest/Skill' element={<Skill />} /> 24 <Route path='/WorksTest/Profile' element={<Profile />} /> 25 <Route path='/WorksTest/MiniMemo' element={<MiniMemo />} /> 26 <Route path='/WorksTest/Tobaccost' element={<Tobaccost />} /> 27 </Routes> 28 29 <Footer /> 30 31 <Bottom /> 32 </div> 33 </Router> 34 ) 35 36 }
vite.config.js
1import { defineConfig } from 'vite' 2 import react from '@vitejs/plugin-react-swc' 3 4 // https://vitejs.dev/config/ 5 export default defineConfig({ 6 base: '/WorksTest/', 7 plugins: [react()], 8 })
package.json
1{ 2 "name": "test", 3 "private": true, 4 "version": "0.0.0", 5 "type": "module", 6 "scripts": { 7 "dev": "vite", 8 "build": "vite build", 9 "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", 10 "preview": "vite preview" 11 }, 12 "dependencies": { 13 "cross-env": "^7.0.3", 14 "react": "^18.2.0", 15 "react-burger-menu": "^3.0.9", 16 "react-dom": "^18.2.0", 17 "react-scroll": "^1.8.9" 18 }, 19 "devDependencies": { 20 "@types/react": "^18.2.15", 21 "@types/react-dom": "^18.2.7", 22 "@vitejs/plugin-react-swc": "^3.3.2", 23 "autoprefixer": "^10.4.14", 24 "eslint": "^8.45.0", 25 "eslint-plugin-react": "^7.32.2", 26 "eslint-plugin-react-hooks": "^4.6.0", 27 "eslint-plugin-react-refresh": "^0.4.3", 28 "gh-pages": "^6.0.0", 29 "postcss": "^8.4.27", 30 "react-router-dom": "^6.15.0", 31 "tailwindcss": "^3.3.3", 32 "vite": "^4.4.5" 33 } 34 }
試したこと1
-
index.html をコピーして 404.htmlを作成
-
package.jsonに下記を追記
package.json
1 "scripts": { 2 "postbuild": "cp build/index.html build/404.html", 3 }
試したこと2
-
404.htmlを作成(空のパターンとindex.htmlの内容をコピーするパターンを試行)
-
vite.config.jsに下記を追記
vite.config.js
1 build: { 2 rollupOptions: { 3 input: { 4 main: resolve(__dirname, 'index.html'), 5 404: resolve(__dirname, '404.html'), 6 } 7 } 8 }
補足情報
恐らく404ページが表示される場合にindex.htmlを参照するようにビルドを行う、ということだと思うのですが、現在の知識では改善することが出来ず、ご教授をおねがいしたいです。
バージョン
- Node.js16.17.1
- React.js:18.2.0
- Vite:4.4.9
- react router v6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。