【问题标题】:React sends me to 404 when route exist当路由存在时,React 将我发送到 404
【发布时间】:2021-02-28 14:39:55
【问题描述】:

我的网站包含路线,点击按钮后,它会将您发送到/start 路线。

它在 localhost 中运行良好 - 这对 htaccess 很可疑,但在我的服务器中它路由到 /start 并返回 404。

PHP 代码有效,因为它意味着向我发送电子邮件并发送给我(也在我的服务器托管中),但只有路由不起作用。

fetch('https://devcore.co.il/server/mail.php', {
    method: 'POST',
    redirect: 'follow',
    body: new URLSearchParams(formData)
})
.then(function(response) {
    if (response.status >= 200 && response.status < 300) {
        return response.text()
    }
    throw new Error(response.statusText)
})
.then(function(response) {
    console.log(response);
    if(response === 'success'){
        history.push("/start");
        history.go(0);
        executeScroll();
    }
})
.catch(function(err) {
    console.log(err);
});

我已经使用 fetch 来应用页面路由,在 localhost 中可以正常工作。

HTACCESS

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
    Header set Access-Control-Content-Type "*"
    Header set Access-Control-Accept "*"
    # This should enable the authentication header
    Header set Access-Control-Allow-Credentials "true"
</IfModule>

我的路线

<Route path="/start">
  //Implementing my `/start` route
</Route>

是什么导致页面在服务器托管上进入 404 但在本地主机上工作?

【问题讨论】:

  • 您发布的 .htaccess 文件实际上并没有做任何事情,那么请求如何通过 React 路由? “它在 localhost 中工作正常 - 这对 htaccess 可疑” - “对 localhost 上的 htaccess? Do you have any other .htaccess` 文件或指令可疑”是什么意思?
  • @MrWhite 我没有任何其他 htaccess,这里的 htaccess 部分是为了让 fetch 工作,所以它会路由到 /start,但现在 /start 在我的服务器上返回 404托管。

标签: javascript reactjs .htaccess


【解决方案1】:

每当我们将我们的 react 应用程序构建到生产模式时,路由在 apache 或 nginx 服务器中是这样的(something.com/index.html/route-path),因此我们必须通过跳过 index.html 来重写路径。试试这个配置。

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

【讨论】:

  • 如果您能提供有关问题原因的更多信息,我将很高兴。
【解决方案2】:

就我个人而言,我发现调用 history.push 非常棘手。还有其他地方可以调用该方法吗?我一般把它放在按钮的onClick部分。

onClick={() => {
console.log("Button clicked");
other methods calls...;
history.push("/start");
}}

但是,这将要求您在每个组件中设置历史常量,因此可能不是最干净的解决方案。这是我能提供的最好的。 如果您找到一种基于 response.status 有条件的 history.push 调用的方法,我会非常感兴趣和嫉妒。

【讨论】:

  • 基本上我所做的工作,我使用响应来获取数据(无论邮件成功还是失败),回显答案,所以我可以使用基于这些响应的条件history.push 调用。
猜你喜欢
  • 1970-01-01
  • 2019-09-03
  • 2018-10-28
  • 2021-02-13
  • 1970-01-01
  • 2019-11-13
  • 2011-08-26
  • 2016-03-17
  • 1970-01-01
相关资源
最近更新 更多