IIS重定向root上的所有请求

时间:2017-05-15 16:55:35

标签: reactjs iis web-config react-router

我有反应路由器的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;

谢谢你们。

1 个答案:

答案 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>