使用 React 在 apache 上刷新页面不起作用

Posted

技术标签:

【中文标题】使用 React 在 apache 上刷新页面不起作用【英文标题】:Refresh page on apache with React doesn't work 【发布时间】:2017-09-25 20:37:15 【问题描述】:

我正在尝试使用 React 创建 SPA,但在尝试重新加载页面时遇到了问题。

在我继续之前,我必须说我已经阅读了这些问题this 和this。我设法使它工作,但仅适用于第一个网址。

例如,我有一个包含所有帖子的博客页面,通过此 URL mysite.com/blog 访问。这个工作正常,如果我刷新页面,一切都会重新加载。

但是,当我尝试使用动态 url 访问单个帖子时,页面无法正常工作。例如,我有这个路由器设置:

// Definiton
<Route path="/post/:url" component=Post />

// Link
<NavLink to="post/" + post.url>...</NavLink>

// Url on the browser
mysite.com/post/this-is-my-first-post

在这种情况下,它不起作用。这是我的.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>

在查看了更多问题后,我注意到它试图从不同的位置加载主文件。例如,当我在页面mysite.com/blog 上时,它正在从mysite.com 加载.css.js 文件。

但是当我是页面mysite.com/post/this-is-my-first-post 并刷新页面时,它会尝试从目录mysite.com/blog 加载.css.js 文件。

我按照 Stuffix 在回答中所说的去做,检查 url 定义以及我的 apache 上的配置,但一切都已启用并正常工作,就像答案所说的那样。

【问题讨论】:

你在使用 Webpack 吗? 【参考方案1】:

好吧,在查看了我使用 Angular 的其他一些项目之后,我注意到了一件事,而且比我做的要容易。

只需在我的index.htmlhead 上添加标签base

<base href="/" />

【讨论】:

我使用.htaccess 将所有子目录路径(通过ResourceFallback)重写回我的“根”文件夹的index.html 并遇到了这个问题。在我所有的.htaccess 尝试中,你的解决方案也对我有用。【参考方案2】:

在您的&lt;Route /&gt; 中,您声明发布路线是/post/this-is-my-first-post,这是正确的。

但是在你的&lt;NavLink /&gt; 中,你指向/blog/post/this-is-my-first-post,因为你错过了一个斜线。

<NavLink to="post/" + post.url>...</NavLink>
              | here

因此导致 404。


如果这没有帮助,您的 sn-p 看起来不错,所以问题可能出在 post.url 返回的内容上。

另外,您的 .htaccess 看起来不错,所以我想说您可能错过了 Apache 配置中的某些内容,例如 AllowOverride all。见this answer。

【讨论】:

我更新了我的问题。我试着按照你说的做,但没有解决。此外,主要问题不是导航到帖子网址,我可以做到这一点。问题是当我在地址栏上键入 url 或在该页面上尝试刷新时。

以上是关于使用 React 在 apache 上刷新页面不起作用的主要内容,如果未能解决你的问题,请参考以下文章

useEffect 中的套接字连接事件在创建组件时不起作用,但在 React 中刷新页面后起作用

在 React Router Dom 中,如果我不按 Enter 或刷新页面,重定向将不起作用

Snowpack & React:热重装/刷新不起作用

React - 即使刷新了如何保持在同一页面上?

react-router browserHistory 在 Apache 服务器上不起作用

React-router typed-url 并在 tomcat、弹性 beanstalk 上刷新