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

IIS中使用URL Rewrite时物理路径错误问题求助

解决IIS反向代理映射localhost/mysite到localhost:81的404问题

一、先把URL Rewrite规则搞对

首先得确认你的重写规则是代理类型,别搞成普通的重定向或者路径重写——很多人栽在这,导致IIS还是死磕本地物理路径。

  • 打开IIS管理器,找到绑定localhost的默认站点,进入URL Rewrite
  • 查看你创建的规则,Action类型必须是Rewrite,还要勾选Append query string
  • 关键的Rewrite URL要设成http://localhost:81{R:0}(如果匹配模式是^mysite(.*),就用http://localhost:81/{R:1},根据你的匹配规则调整)
  • 规则必须添加在**默认站点(C:\inetpub\wwwroot)**下面,别加到mysite的子站点里——你根本没建这个子站点,只是想通过路径代理而已

二、再核实ARR代理真的启用了

虽说你说已启用,但得确认这几点:

  • 点击IIS最顶部的服务器节点,进入Application Request Routing Cache
  • 点击右侧的Server Proxy Settings,确保Enable proxy是勾选状态
  • 顺便把Reverse rewrite host in response headers也勾选上——要是你的ASP.NET Core站点有跳转,这个选项能修正跳转路径,避免跳错地址

三、先搞定Failed Request Tracing无输出的问题

这个工具能帮你看清请求到底在哪卡壳,必须先弄好:

  • 打开默认站点的功能视图,找到Failed Request Tracing Rules
  • 点击右侧**Add...**创建新规则:
    • 勾选所有内容类型,状态代码填404
    • 勾选URL Rewrite和ASP.NET等相关提供程序
    • 确保C:\inetpub\logs\FailedReqLogFiles目录给IIS_IUSRS和NETWORK SERVICE添加了读写权限
  • 重启默认站点和IIS服务,再访问localhost/mysite,查看日志是否生成

四、避免虚拟目录/子站点冲突

别在默认站点下创建名为mysite的虚拟目录或子站点,否则IIS会优先查找这个目录的物理路径,根本不走代理规则。之前建过的话直接删除即可。

五、直接修改web.config确保规则生效

要是IIS界面配置的规则没起作用,直接编辑默认站点根目录的web.config,替换成以下内容(按需调整):

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Proxy to mysite" stopProcessing="true">
          <match url="^mysite(.*)" />
          <action type="Rewrite" url="http://localhost:81{R:1}" />
          <serverVariables>
            <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
            <set name="HTTP_ACCEPT_ENCODING" value="" />
          </serverVariables>
        </rule>
      </rules>
      <outboundRules>
        <rule name="Restore Accept Encoding" preCondition="NeedsRestoringAcceptEncoding">
          <match serverVariable="HTTP_ACCEPT_ENCODING" pattern="^(.*)" />
          <action type="Rewrite" value="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" />
        </rule>
        <preConditions>
          <preCondition name="NeedsRestoringAcceptEncoding">
            <add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=".+" />
          </preCondition>
        </preConditions>
      </outboundRules>
    </rewrite>
    <urlCompression doStaticCompression="false" doDynamicCompression="false" />
  </system.webServer>
</configuration>

这段配置能处理编码问题,避免代理后内容压缩异常,同时确保规则正确指向81端口的站点。

六、最后确认ASP.NET Core站点的配置

虽说你说localhost:81能访问,但还是得核对下:

  • 你的ASP.NET Core站点在IIS里的绑定是localhost:81,物理路径是C:\Websites\mysite
  • 站点的应用程序池要设成无托管代码(毕竟是.NET Core站点)
  • 应用程序池的身份要有C:\Websites\mysite的读写权限

全部设置完成后重启IIS服务,再访问localhost/mysite应该就能正常代理了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:40:55