【问题标题】:React BrowserRouter Route is not working after deploy部署后 React BrowserRouter 路由不起作用
【发布时间】:2020-01-23 10:33:40
【问题描述】:

我有一个简单的网站,并且有 2 个离线工作的链接,但如果我将其部署并上传到网站上,那么第一页工作正常,但是当我点击添加链接时,它给了我 404 和列表链接工作正常,两个链接离线工作正常

<a href="/react/">List</a>
<a href="/react/Add">Add</a>

路由器文件

ReactDOM.render(
  <BrowserRouter>
    <Route path="/react/" exact component={List}/>
    <Route path="/react/Add" exact component={Add}/>
  </BrowserRouter>,
  document.getElementById('root')
);

包.json

{
    "name": "axios1",
    "version": "0.1.0",
    "homepage":"http://aroratour.com/react/",

【问题讨论】:

  • 添加更多代码,例如您的路由和 package.json 文件。
  • 我已经添加了我的路线和包裹文件
  • 嗨 vivek,检查我的解决方案,如果有帮助,请告诉我。
  • 添加@bahadur 引用的开关和确切路径,部署并再次检查

标签: reactjs hyperlink routes


【解决方案1】:

您已将项目部署在名为react 的子文件夹中。您需要将basename 添加到您的BrowserRouter 并需要从您的Route's 路径中删除/react,

<BrowserRouter basename="/react">
    <Switch> // Switch return the first matching Route
      <Route path="/" exact component={List}/>
      <Route path="/Add" exact component={Add}/>
    </Switch>
</BrowserRouter>

注意:确保添加.htaccess文件。

如果您的项目中有任何Link,则不应在路径中包含/react。

例如,要使用Link 导航到/Add,您应该有,

<Link to="/Add"> Add </Link>

这将在内部转换为,

<a href="/react/Add"> Add </a>   //React will automatically add `/react` from basename in BrowserRouter

更新

这个.htaccess 内容适合我,

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/index.html$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\.(css|gif|ico|jpg|js|png|swf|txt|svg|woff|ttf|eot)$
RewriteRule . index.html [L]

【讨论】:

  • 我需要在 react 文件夹内部还是外部创建 .htaccess 文件?
  • 我在 react 文件夹中写入了 .htaccess 文件,但仍然有同样的问题
  • 您使用的是哪台服务器?
  • 我使用的是linux服务器
  • 您可以在 aroratour.com/react 上查看问题
【解决方案2】:

您需要再添加一件事,同时使用“切换”和“确切路径”而不是“路径”

import { BrowserRouter, Route, Switch } from 'react-router-dom';

ReactDOM.render(
<BrowserRouter basename="/react">
    <Switch>
       <Route exact path="/"  component={List}/>
       <Route exact path="/Add"  component={Add}/>
    </Switch>

</BrowserRouter>,
document.getElementById('root')
);

【讨论】:

  • 仍然有同样的问题
【解决方案3】:

当你部署时,你必须添加.htaccess 来阻止所有路由请求到 index.html 页面。 使用以下代码在 dist 文件夹中创建 .htaccess。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.html$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.html [L]
</IfModule>

【讨论】:

  • 仍然有同样的问题
  • 你能分享一下你得到了什么结果吗?
  • 我找不到 404
猜你喜欢
  • 2019-02-04
  • 2022-11-04
  • 2022-08-23
  • 2021-09-08
  • 1970-01-01
  • 2019-05-12
  • 2022-10-15
  • 2018-02-07
  • 2021-07-20
相关资源
最近更新 更多