我相信上面是 Dennis Nerush 提到的,您需要使用 {browserHistory} 而不是 {hashHistory},但是要使相同的页面呈现工作,您需要稍微配置您的服务器以允许这样做。
根据您的托管位置或您使用的服务器,有几种方法可以做到这一点
对于Apache,您必须将以下内容添加到 .htaccess(或创建 .htaccess 并将其放在您网站的根文件夹中):
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]
对于 Node.js/ Express,您需要添加以下代码:
app.get('/*', function(req, res) {
res.sendFile(path.join(__dirname, 'path/to/your/index.html'), function(err) {
if (err) {
res.status(500).send(err)
}
})
})
对于 Nginx 服务器,您需要将以下内容添加到 Nginx.conf 文件中
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.html break;
}
}
对于 Amplify,您需要转到 Rewrites & Redirects 并添加一个包含以下信息的新规则(注意我只在 AWS 上使用过):
Source address: </^[^.]+$|\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf)$)([^.]+$)/>
Target address: /index.html
Type: 200
如果您想对该主题进行更多研究,这里有一些链接。
https://www.andreasreiterer.at/fix-browserrouter-on-apache/#comment-186(专用于Apache)
https://ui.dev/react-router-cannot-get-url-refresh/(针对不同服务器或没有服务器的多种方法,我没有在上面添加)
React Router DOM 在 Amplify Console AWS 上无法正常工作(将此用于 AWS 和 Amplify)