IIS重写URL中的哈希(#)

vvppvyoh  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(165)

我在一个使用.NET作为后端,ReactJS作为前端框架的应用程序中工作。目前,我们想从React Hash Router迁移到React Browser Router。变化进行得很顺利。我们面临的唯一问题是,我们无法编写一个成功的IIS重写规则,将带有“#”的URL重定向到没有哈希的URL。
有没有什么方法可以使用IIS重定向将:https://sampleApp/#/category/3/id/45255更改为:https://sampleApp/category/3/id/45255
我们已经尝试了这个规则和一些变化。

  1. <rule name="HashRemoval" stopProcessing="true">
  2. <match url="(.*)#(.*)" />
  3. <action type="Redirect" url="{R:1}{R:2}" redirectType="Permanent" />
  4. </rule>

字符串

zwghvu4y

zwghvu4y1#

在IIS中,URL重写模块不会在本机处理URL的锚部分,因为这部分在客户端处理,而不是作为HTTP请求的一部分发送到服务器。请求不会到达服务器,因此IIS URL重写规则无法与之匹配,因为它永远不会在服务器端的传入请求中看到。
所以如果你在客户端执行重定向,那就更好了。

  1. if (window.location.hash) {
  2. const newLocation = window.location.href.replace(/#/, '');
  3. window.location.replace(newLocation);
  4. }

字符串
下面是IIS URL重写路由器规则:

  1. <rule name="ReactAppRoutes" stopProcessing="true">
  2. <match url=".*" />
  3. <conditions logicalGrouping="MatchAll">
  4. <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  5. <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  6. </conditions>
  7. <action type="Rewrite" url="/index.html" />
  8. </rule>

展开查看全部

相关问题