您好我需要部署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的问题有些错误吗?此致
答案 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>