javascript React Router在生产中出现404错误

nwlls2ji  于 5个月前  发布在  Java
关注(0)|答案(5)|浏览(54)

React Router可以在本地机器,Chrome上工作,但不能在Safari和其他浏览器上工作,

<Switch>
    <Route exact path={"/"} component={Home} />
    <Route path="/programs/:slug" component={Programs} />
    <Route path="/page/:slug" component={Page} />
    <Route component={NotFound} />
</Switch>

字符串
这是我的代码,但它在开发模式下完美地工作,没有错误,但在生产,safari给404错误,当我导航到程序/:slug或页面/:slug

5m1hhzi4

5m1hhzi41#

我把它添加到.htaccess

RewriteBase /
RewriteCond %{REQUEST_URI} !^/(assets/?|$)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]

字符串
感谢Kishan Mundha的解释

gcuhipw9

gcuhipw92#

您可能需要在服务器上配置单个入口点index.html。所有URL都应该指向index.html,入口点将根据路由决定如何渲染和内容。

p4rjhz4m

p4rjhz4m3#

如果您使用的是pm2 serve,则只需添加--spa标志即可。

xxb16uws

xxb16uws4#

我把它添加到./public_html/.htaccess文件中

<IfModule mod_rewrite.c>

  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-l
  RewriteRule . /index.html [L]

</IfModule>

字符串
解决方案:如何修复"404" error when directly accessing a component in react

mbyulnm0

mbyulnm05#

这是因为你的网站是一个基于React的SPA(单页应用程序)。
当你通过root /访问网站时,它会自动加载index.html,这是你的应用程序,然后当你访问其他页面时,你实际上永远不会离开index.html页面
因此它加载额外的数据并模拟浏览器页面更改。
然而,当你提出一个新的请求,例如直接进入其中一个子页面或点击刷新,而在他们的Web服务器被要求提供该文件.但该文件实际上并不存在.因此,404错误。
解决这个问题的方法是通过重定向,你需要在部署文件夹中有一个_redirects文件,其中包含
运行命令生成项目时。
npm run build
然后简单地创建一个新的file _redirect并粘贴这一行
/*/index. html 200
然后重新部署项目,它将正常工作。

相关问题