c0r*_*v0s 5 nginx reactjs pm2 react-router
我有一个用 React 制作的网站,在 Digital Ocean 上运行 pm2 和 NGINX。入口点“/”加载得很好,但是当我尝试转到“/:用户名”路线时,我只是得到 404 Not Found。我的路由在 App.jsx 中定义如下:
<Switch>
<Route
exact path='/'
render={
routeProps => <Front {...routeProps} />
}
/>
<Route
path='/:username'
render={
routeProps => <Profile handleSignOut={ this.handleSignOut } {...routeProps} />
}
/>
</Switch>
Run Code Online (Sandbox Code Playgroud)
index.js 有以下代码:
ReactDOM.render(<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root')
)
Run Code Online (Sandbox Code Playgroud)
当在本地运行时,这些路由都按预期工作npm run start。
小智 16
对于在 Digital Ocean 上的应用程序平台上托管的反应应用程序。
幸运的是,您现在可以通过 UI 启用它。请按照以下步骤操作,应该可以解决问题。
使用云面板 UI:登录并单击应用程序 > 设置 >> 单击组件名称 > 向下滚动到自定义页面 > 编辑自定义页面并选择 Catchall > 在页面名称块中输入 index.html > 保存
干杯,阿林泽山
对于使用不同框架(如 React 或 Angular)编写的单页应用程序来说,这是一个非常常见的问题。
不过,这个问题与框架无关。相反,它在于浏览器内路由的机制。它实际上不是真正的路由。当您打开单页应用程序时,index.html会提供一个简单的文件,当您在应用程序内部导航时,框架会负责渲染新页面并伪造导航事件(以便将其记录在浏览器历史记录和历史记录中)。网址已更改)。
但是,当您到达子地址(例如“myapp.com/some-page”)时,这将使服务器尝试提供名为“myapp.com/some-page”的实际目录,而不是您的index.html文件,您显然需要该文件运行应用程序,由于该目录不存在,因此会抛出 404 错误。
要解决此问题,您需要重新配置服务器,以便在出现 404 错误时,它不会失败,而是返回您的index.html文件;这样您的代码将被加载,底层框架将处理路由以显示正确的页面。
| 归档时间: |
|
| 查看次数: |
1892 次 |
| 最近记录: |