IIS Web Server web.config重写URL暴露于地址栏的问题求助
解决IIS URL重写后地址栏显示newfolder的问题
URL重写本身是服务器内部处理逻辑,不会主动修改浏览器地址栏,你遇到的情况说明服务器实际返回了重定向响应(301/302),而非单纯的内部重写。最常见的原因是目标目录newfolder为物理存在的目录,触发了IIS的自动跳转规则。以下是仅用重写规则的解决方法:
核心修正思路
通过调整规则条件,避免触发IIS对物理文件/目录的自动跳转逻辑,确保所有重写操作仅在服务器内部完成。
修正后的配置
<rewrite> <rules> <rule name="New folder" enabled="true" stopProcessing="true"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll"> <!-- 排除已包含newfolder的请求,避免规则循环执行 --> <add input="{REQUEST_URI}" pattern="^/newfolder" negate="true" /> <!-- 排除物理存在的文件请求 --> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <!-- 排除物理存在的目录请求 --> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="/newfolder/{R:0}" appendQueryString="true" logRewrittenUrl="true" /> </rule> </rules> </rewrite>
关键说明
- 新增的
IsFile和IsDirectory条件,确保只有当请求路径既不是物理文件也不是物理目录时,才执行重写操作。这避免了IIS处理物理目录时自动返回重定向(比如不带斜杠的目录请求会被强制跳转到带斜杠的版本)。 - 保留原有的排除
newfolder的条件,防止规则陷入循环执行。
额外检查项
- 用浏览器开发者工具查看网络请求,确认没有301/302状态码的响应。
- 如果
newfolder是物理目录,可在web.config中单独禁用该目录的自动跳转:
<location path="newfolder"> <system.webServer> <directoryBrowse enabled="false" /> <httpRedirect enabled="false" /> </system.webServer> </location>
内容的提问来源于stack exchange,提问作者Anne Droid
相关产品推荐
相关产品推荐

