You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IIS路由站点Rewrite规则访问/current时无法找到资源文件求助

问题根源

你完全猜对了问题所在!当你访问http://testpage.com/current时,IIS把请求重写到了5001端口的根路径,顺利拿到了index.html。但页面里的<script src="/index.js">是绝对路径,浏览器会直接发起http://testpage.com/index.js的请求——这个URL根本不匹配你的^current(.*)?重写规则,自然不会被转发到5001端口,服务器找不到资源就返回404了。而当你用^(.*)?规则时,所有请求都被转发到5001,所以静态资源也能正常加载。

简便修复方法

这里有几个快速解决的方案,你可以根据自己的需求选择:

1. 修改静态资源引用为相对路径(最简单)

直接修改5001站点里index.html的资源引用,把绝对路径改成相对路径:

<script type="text/javascript" src="index.js"></script>
<!-- 或者用 ./ 明确表示当前目录 -->
<script type="text/javascript" src="./index.js"></script>

这样当浏览器从/current路径加载页面时,会自动请求/current/index.js,这个URL会匹配你的原重写规则,被转发到5001端口的/index.js,就能正常加载资源了。

2. 添加额外的重写规则覆盖静态资源请求

如果你不想修改5001站点的代码,可以在路由站点的web.config里添加一条新规则,专门匹配那些本该指向5001站点的静态资源请求:

<!-- 建议放在原RewriteRule之前 -->
<rule name="RewriteStaticAssetsForCurrent" stopProcessing="true">
  <match url="^index.js$" /> <!-- 可扩展为匹配所有静态资源:^.*\.(js|css|png|jpg|svg)$ -->
  <conditions>
    <!-- 可选:确保请求来自访问/current页面的用户,避免误转发其他站点资源 -->
    <add input="{HTTP_REFERER}" pattern="http://{HTTP_HOST}/current" />
  </conditions>
  <action type="Rewrite" url="http://{HTTP_HOST}:5001/{R:0}" />
</rule>

<!-- 你的原重写规则 -->
<rule name="RewriteRule" stopProcessing="true"> 
  <match url="^current(.*)?" /> 
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> 
  <action type="Rewrite" url="http://{HTTP_HOST}:5001/{R:1}" /> 
</rule>

这个规则会把直接请求/index.js的请求(来自/current页面的)转发到5001端口。如果需要覆盖更多静态资源,把match里的^index.js$改成^.*\.(js|css|png|jpg|svg)$即可。

3. 使用HTML的<base>标签统一资源路径

在5001站点的index.html头部添加<base>标签,指定页面中所有相对路径的基准URL:

<head>
  <base href="/current/" />
  <!-- 其他头部内容 -->
</head>

这样页面里的所有相对路径资源都会以/current/为基准,比如src="index.js"会被解析成/current/index.js,同样会被你的重写规则转发到5001的/index.js。这个方法适合页面里有大量静态资源的情况,不用逐个修改引用路径。

内容的提问来源于stack exchange,提问作者MistyK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:41:28