未找到生产构建404的反应

时间:2017-10-25 20:12:47

标签: apache reactjs

您好我需要部署react app。

要实现我的目标:" npm run build"

之后在我的vhost.conf中添加了vhost

<VirtualHost *:80>
ServerName hello.local
DocumentRoot c:/wamp64/www/hello_world/build
<Directory  "c:/wamp64/www/hello_world/build">
             Options Indexes FollowSymLinks MultiViews
             AllowOverride All
             Require all granted
</Directory>

我还加入了etc / hosts hello.local

当然我已经在httpd.conf

中启用了mod重写

当我正确运行我的反应应用程序的hello.local / main页面显示时,但是当我想要反应 - 反应路径路径hello.local / example时,我收到404未找到错误。请帮助它是什么? apache配置或react-router的问题有些错误吗?此致

2 个答案:

答案 0 :(得分:11)

这是SPA的常见问题。在SPA中,大多数路由都发生在客户端。在您的情况下,大多数react-router应该正在完成这项工作。由于整个js捆绑为单个文件并在index.html中提供,因此您需要为服务器中index.html的所有路径提供non-existing

你必须添加这样的配置

RewriteEngine On  
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]

RewriteRule ^ /index.html [L]

因此,如果您的服务器中没有匹配的路径,则会提供index.html。然后javascript将执行,react-router(客户端路由)将接管并显示路由的正确组件。

大多数SPA都是如此,路由发生在客户端。

答案 1 :(得分:0)

在 IIS Window 10 中使用 web.config

    <?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  https://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.webServer>
    <rewrite>
  <rules>
    <rule name="Imported Rule 1" stopProcessing="true">
      <match url="^" ignoreCase="false" />
      <conditions logicalGrouping="MatchAny">
        <add input="{DOCUMENT_ROOT}{URL}" matchType="IsFile" ignoreCase="false" />
        <add input="{DOCUMENT_ROOT}{URL}" matchType="IsDirectory" ignoreCase="false" />
      </conditions>
      <action type="None" />
    </rule>
    <rule name="Imported Rule 2" stopProcessing="true">
      <match url="^" ignoreCase="false" />
      <action type="Rewrite" url="/index.html" />
    </rule>
  </rules>
</rewrite>
  </system.webServer>
  <system.web>
    <customErrors mode="Off" />
    <httpRuntime targetFramework="4.6.1" executionTimeout="240" maxRequestLength="2048000" />
    <trace enabled="true" requestLimit="40" localOnly="false" />
  </system.web>
  <system.webServer>
    <defaultDocument>
      <files>
        <clear />
        <add value="Index.aspx" />
        <add value="Default.htm" />
        <add value="Default.asp" />
        <add value="index.htm" />
        <add value="index.html" />
        <add value="iisstart.htm" />
        <add value="default.aspx" />
      </files>
    </defaultDocument>
    <directoryBrowse enabled="false" />
  </system.webServer>
</configuration>