【问题标题】:react-router throwing 404 upon page refresh with React app hosted on GoDaddyreact-router 在使用 GoDaddy 上托管的 React 应用程序刷新页面时抛出 404
【发布时间】:2019-10-18 14:25:31
【问题描述】:

我使用 GoDaddy (http://normaned.com) 部署了一个 React 网站,但我的 react-router 路由在刷新时无法正常工作。单击链接按预期工作,但如果刷新页面,则会显示 404 页面。我正在使用来自react-routerBrowserRouter

GoDaddy 托管计划是“使用 Plesk 进行经济型 Windows 托管”。不幸的是,我不是设置托管服务的人,而且我不确定我是否可以从 Plesk 更改为 cPanel 而无需额外的金钱成本……或者这是否是一种更接近解决我的问题的方法(即 Windows 与 Linux 托管)。

编辑 10/19:我现在意识到服务器是 Windows IIS 服务器,我需要一个 web.config 文件(不是 .htaccess 文件)。不过,我仍然不确定web.config 文件中需要包含哪些代码。

这是我的网站 GitHub 存储库:https://github.com/jenna-m/norman-ed


我尝试了在 *、GoDaddy 帮助论坛和其他地方找到的建议方法,但仍然无法正常工作。 以下是我尝试过的一些方法:

https://*.com/a/40591955/11995771

https://gist.github.com/alexsasharegan/173878f9d67055bfef63449fa7136042

我尝试将以下内容添加到 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>

我直接在 Plesk 中创建了 .htaccess 文件,确保没有添加额外的字符(如本文 (https://www.godaddy.com/help/what-is-htaccess-2504) 中所建议的那样

在尝试解决该问题一段时间后,我意识到这可能与我使用 Plesk 与 cPanel 的事实有关。所以,我发现了这些潜在的解决方法:

https://support.plesk.com/hc/en-us/articles/115001697373-Website-with-configured-htaccess-is-not-working-404-Not-Found

https://support.plesk.com/hc/en-us/articles/115003015833-Redirection-rules-in-htaccess-file-do-not-work-in-Plesk

我认为这些解决方案中的任何一个都可以,但它们没有。

我从 Plesk 支持 (https://support.plesk.com/hc/en-us/articles/115000063989-Does-Plesk-support-Apache-web-server-for-Windows-) 找到了这篇文章,这使我找到了这篇 Microsoft 文章 (https://blogs.msdn.microsoft.com/azureossds/2015/04/23/converting-apache-htaccess-rules-to-iis-web-config-using-iis-manager-for-azure-websites/)。

【问题讨论】:

    标签: reactjs .htaccess react-router plesk plesk-onyx


    【解决方案1】:

    如果您使用的是 Apache 服务器,问题可能是您的 .htaccess 文件,当您使用 React 路由器时,在 React 中创建或声明的路由在服务器中不存在,因此我们必须配置请求以便每个页面都转到 index.html 并在未找到页面时在 React 中显示 404。

    根据 create-react-app 文档:

    如果您使用的是 Apache HTTP Server,则需要在 public 文件夹中创建一个 .htaccess 文件,如下所示:

       Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^ index.html [QSA,L]
    

    create-react-app 文档链接:

    https://create-react-app.dev/docs/deployment

    您可以在 React 路由器中阅读有关在 React 中创建 404 页面的更多信息:文档:

    https://reacttraining.com/react-router/web/example/no-match

    【讨论】:

    • 感谢您的回复。我用您提供的代码替换了.htaccess 中的代码,但它似乎不起作用(按原样,未缩进,即使包装在&lt;IfModule&gt; 中)。我想我不完全确定该网站是否使用 Apache 服务器。我所知道的是托管计划使用的是 Windows Plesk,而我的 Plesk 仪表板上没有任何关于 Apache 的信息。我用更多信息更新了我原来的问题。
    • 为了能够帮助您,我需要知道它是 apache、windows 服务器还是其他服务器,以及您如何提供文件,换句话说,您使用的是哪种后端技术,因为例如如果您使用 nodejs 为应用程序提供服务,则需要进行配置以使 react 应用程序在节点中工作以使其工作
    • 经过一番探索,我现在明白服务器是 Windows IIS,我现在意识到我需要一个 web.config 文件而不是 .htaccess 文件。我现在正在寻找这样的资源 (forums.iis.net/t/1162450.aspx) 来解决这个问题。我没有后端;我只是使用 create-react-app,并没有自己实现任何后端,因为这是一个单页应用程序。
    • 好吧!我让它与 web.config 文件和这段代码 (*.com/a/46808403/11995771) 一起工作。
    【解决方案2】:

    原来我使用的是 Windows IIS 服务器。我是 Web 服务器领域的新手,不知道我使用的是 IIS 服务器。

    事实证明,我需要一个 web.config 文件来使我的 URL 重定向工作,而不是一个 .htaccess 文件,就像我最初尝试使用的那样。

    这是我的web.config 文件的内容(来自this * 答案):

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.webServer>
        <httpErrors errorMode="Custom" existingResponse="Replace">
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" path="/" responseMode="ExecuteURL" />
        </httpErrors>
      </system.webServer>
    </configuration>
    

    【讨论】:

    • 我从过去 4 天开始一​​直试图弄清楚这一点。你救了我,谢谢:)
    【解决方案3】:

    尝试在你的 package.json 文件中指定你的主页

    {
    "homepage": "https://yoursite.com",
    }
    

    然后运行

    npm 构建

    纱线构建

    【讨论】:

      最近更新 更多