使用托管在 GoDaddy 上的 React 应用程序,react-router 在页面刷新时抛出 404

Jen*_*nna 3 .htaccess plesk reactjs react-router plesk-onyx

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

GoDaddy 托管计划是“Economy Windows Hosting with Plesk”。不幸的是,我不是设置托管服务的人,而且我不确定我是否可以从 Plesk 更改为 cPanel 而无需额外的金钱成本... (即,Windows 与 Linux 托管)。

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

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


我已经尝试过我在 StackOverflow、GoDaddy 帮助论坛和其他地方找到的建议方法,但它仍然不起作用。以下是我尝试过的一些事情:

/sf/answers/2841436881/

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

我尝试将以下内容添加到根目录中的.htaccess文件中public_html

<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>
Run Code Online (Sandbox Code Playgroud)

.htaccess直接在 Plesk 中创建了文件,确保没有添加额外的字符(如本文所建议的(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-网站/)。

Jen*_*nna 10

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

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

这是我的文件的内容(从StackOverflow答案中找到)web.config

<?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>
Run Code Online (Sandbox Code Playgroud)


Ang*_*ppe 9

如果您使用的是 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]
Run Code Online (Sandbox Code Playgroud)

链接到 create-react-app 文档:

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

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

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

  • 经过一番研究后,我现在了解到服务器是 Windows IIS,并且我现在意识到我需要一个“web.config”文件而不是“.htaccess”文件。我现在正在研究这样的资源(https://forums.iis.net/t/1162450.aspx)来解决这个问题。我没有后端;我只是使用了 create-react-app,并且自己没有实现任何后端,因为这是一个单页面应用程序。 (2认同)
  • 好吧!我让它与“web.config”文件和此代码一起使用(/sf/answers/3276588241/)。 (2认同)