我已经按照他们的文档在 Amplify 控制台上部署了 React 应用程序。该站点已部署并运行良好,我可以使用链接进行导航,但是当我尝试直接登陆任何 url 时,我被重定向到我配置的 404 页面。
下面是我正在使用的代码
ReactDOM.render(
<Router>
<Route path="/" component={App} />
</Router>,
document.getElementById("root"),
);
Run Code Online (Sandbox Code Playgroud)
这是我的路线的样子 -
<Switch>
<Route
exact
path="/"
render={(): JSX.Element => <Home auth={this.auth} />}
/>
<Route path="/features" render={(): JSX.Element => <Features />} />
<Route
path="/pagenotfound"
render={(): JSX.Element => <PageNotFound />}
/>
<Redirect from="/**" to="/pagenotfound" />
</Switch>
Run Code Online (Sandbox Code Playgroud)
这是应用程序的链接 - https://master.dkf0zemoh330o.amplifyapp.com/features
这似乎是其他一些的重复。但没有任何解决方案对我有用。
通过链接导航工作正常。刷新页面或手动导航仅适用于桌面(chrome 和 firefox,不适用于 Safari)。在桌面 safari 和所有 iOS 浏览器上,它只是在浏览器中显示整个 JSON 对象,似乎并不提供静态文件。
我试过 Router、BrowserRouter 和 HashRouter。唯一有效的是HashRouter。但是,我不想在 url 中使用哈希值。
我没有收到任何错误,而且我已经全部记录了控制台。当我在 getProducts 操作创建器和服务器“/products”路由中放置日志时,Safari 不会在浏览器中显示操作创建器控制台日志。但是,heroku 日志显示 path="/products" 正在被命中,而不是 path="/static/css/main.etc.," 或 path="/static/js/main.etc.," 文件.
我研究过和/或尝试过的事情:
手动刷新或写入时,React-router url 不起作用
https://github.com/ReactTraining/react-router/issues/4727
React Routing 在本地机器上工作,但在 Heroku 上不工作
https://github.com/ReactTraining/react-router/issues/4671
这是一个精简的样本。注意:我同时使用来代理我的请求。
// 客户端/index.js
import React from 'react'
import ReactDOM from 'react-dom'
import './styles/index.css';
import App from './App'
import registerServiceWorker from './registerServiceWorker'
import { Router } from 'react-router-dom'
import { Provider } …Run Code Online (Sandbox Code Playgroud)