部署后反应路由器 url 问题

Posted

技术标签:

【中文标题】部署后反应路由器 url 问题【英文标题】:react router url issues after deployment 【发布时间】:2018-05-16 00:36:27 【问题描述】:

我正在使用 React 路由器来更改路由。这在我本地开发时效果很好。

我的路由器代码如下所示,一切正常。

<Router>
    <Route exact path="/" render=(routeProps)=> <Homepage ...routeProps />/>
    <Route path="/graph" render=(routeProps)=> <AboutPage ...routeProps />/>            
</Router>

我遇到的问题是当我将它部署到我的 github 页面时,http://exampleuser.github.io/react-project

由于项目位于 react-project 文件夹中,因此 "/" 指的是 http://exampleuser.github.io/ 的实际路线

任何人都可以建议路径的外观,以便在部署时可以正常工作吗?

【问题讨论】:

您尝试过使用&lt;Switch&gt; 吗? import &lt;Switch&gt; from 'react-router-dom' 然后将所有内容包装在 &lt;div&gt; 中,然后将所有 &lt;Route&gt; 包装在 &lt;Switch&gt; 我有,但我认为这与 Switch 无关 - 我相信一旦我部署后它与路线有关,因为它不再是 "/" "/"&lt;Route&gt;放在最后而不是第一个? 你是否有机会使用 create react 应用程序? @randomguy04 我是 【参考方案1】:

你可以在你的路由器中使用basename prop,只要确保你只在生产而不是在开发中使用它(你可以为此使用环境变量)你的路由器应该如下所示:

<Router basename="your-react-project">
  /* routes */
</Router>

如果您使用的是 create_react_app,则可以像这样使用环境变量 process.env.PUBLIC_URL(在开发中它是空的,因此它适用于机器人开发和生产):

<Router basename=process.env.PUBLIC_URL>
  /* routes */
</Router>

我实际上有一个project running 使用这种配置并且工作得很好。

【讨论】:

所以当它是我的 github 存储库根目录下的项目时它实际上工作正常,但它位于子文件夹中,即 - http://exampleuser.github.io/react-project 您尝试过第一种方法吗?在哪里可以手动设置基本名称? 是的,伙计,刚刚部署到那里就可以了!垒手是一种享受!绿勾出现!附带问题,你在哪里设置 process.env.PUBLIC_URL 变量? 很高兴听到这个消息。您不必自己设置,他们在这里简要解释了它的工作原理github.com/facebookincubator/create-react-app/blob/master/…【参考方案2】:

这是一个简单的解决方法,我在这里遇到了同样的问题,我是如何解决的。

1- 如果您使用的是 apache,请转到 cPanel 或服务器中的根目录。并创建一个 .htaccess 文件

打开文件并添加以下代码。

#jerryUrena is awesome RewriteEngine on RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d RewriteRule . /index.html [L]

在此之后,您的网站应该以相同的方式运行。

【讨论】:

以上是关于部署后反应路由器 url 问题的主要内容,如果未能解决你的问题,请参考以下文章

反应路由和django url冲突

登录后反应路由器导航

如何调试反应路由器未在 url 更改时加载组件

反应路由器 - 登录后重定向

反应路由器 - 登录后重定向

使用反应路由器根据 url 更改组件