我有反应路由器的reactjs应用程序。我不想使用哈希历史记录,我遇到刷新页面创建404错误的问题(刷新时没有加载react-router,浏览器想要获取不存在的内容,因此404)。我找到了一些解决方案,我想将每个请求重定向到root,因此服务器总是首先使用import标签获取index.html。
我的文件夹结构很简单:
ROOT/
-- index.html
-- static/
-- js/
-- main.js
-- css/
etc...
我在这个网站上找到了这个web.config规则:
<rewrite>
<rules>
<rule name="redirect all requests" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" pattern="" ignoreCase="false" />
</conditions>
<action type="Rewrite" url="index.html" appendQueryString="true" />
</rule>
</rules>
</rewrite>
这对第一个文件夹路径中的网址非常有效,我的意思是/items
,/contact
这样的所有请求都很好。但是/items/detail
之类的请求被破坏了,因为浏览器正在查看items
文件夹而不是文档根目录。同样非常重要的是我的webpack以这种方式生成index.html脚本标记:<script type="text/javascript" src="./static/js/main.js">
。
由于./
,src属性是否可能出错?我怎样才能告诉服务器(IIS 10)&#34;除了文档根目录之外,别去看其他地方?&#34;
谢谢你们。
答案 0 :(得分:2)
这是我发现的一个解决方案,我有一些路径,我仍然希望通过我的IIS处理,但其余的我想要做出反应照顾。
<configuration>
<system.webServer>
<rewrite>
<rewriteMaps>
<rewriteMap name="^(.*)$" />
</rewriteMaps>
<rules>
<rule
name="redirect all requests"
stopProcessing="true"
>
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add
input="{REQUEST_URI}"
pattern="/someOtherResourceIstillWantIIStoHandle(.*)$"
negate="true"
/>
<add
input="{REQUEST_FILENAME}"
matchType="IsFile"
negate="true"
/>
<add
input="{REQUEST_URI}"
pattern="/resourcecentre(.*)$"
negate="true"
/>
</conditions>
<action type="Rewrite" url="/index.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>