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

IIS下使用Rewrite Map配置Rewrite Rule的问题求助

解决IIS中Rewrite Map配合Rewrite Rule的重写问题

嘿,看了你的配置,我马上发现了几个可能导致规则不生效的点,帮你一步步修复:

核心问题:大小写不匹配

你的Rewrite Map里的key是小写的chile和japan,但请求的URL里是/Japan/test.html、/Chile/test.html这种首字母大写的路径。IIS的Rewrite Map默认是大小写敏感的,所以根本匹配不上对应的value。

修复方案:统一转为小写匹配

修改规则里的conditions部分,把捕获到的国家名称转为小写后再去Map里查找:

<conditions>
    <add input="{Sites:{ToLower:{R:1}}}" pattern="(.+)" />
</conditions>

{ToLower:{R:1}}这个内置函数会把{R:1}捕获到的Japan转成japan,完美匹配Map里的key。

确保Rewrite Map的位置正确

很多人会忽略这点:Rewrite Map必须放在<rewrite>节点下的<rewriteMaps>里,而且要放在<rules>节点之前,不然规则找不到Map。正确的web.config结构应该是这样的:

<system.webServer>
    <rewrite>
        <!-- 先放Rewrite Maps -->
        <rewriteMaps>
            <rewriteMap name="Sites">
                <add key="chile" value="cl" />
                <add key="japan" value="jp" />
                <!-- 后续加更多国家直接在这里加就行 -->
            </rewriteMap>
        </rewriteMaps>
        <!-- 再放Rules -->
        <rules>
            <rule name="Rewrite sites" enabled="true" stopProcessing="true">
                <match url="^/(.*)/test.html$" />
                <conditions>
                    <add input="{Sites:{ToLower:{R:1}}}" pattern="(.+)" />
                </conditions>
                <action type="Rewrite" url="{C:1}/en/simple-test" appendQueryString="false" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

可选:让URL匹配不区分大小写

如果想兼容各种大小写的请求(比如/JAPAN/test.html或者/japan/test.html),可以给<match>标签加上ignoreCase="true":

<match url="^/(.*)/test.html$" ignoreCase="true" />

测试小技巧

用IIS管理器里的URL重写测试工具(选中网站→打开URL Rewrite→右侧点击「测试模式」),输入/Japan/test.html,就能看到是否正确捕获到参数,以及Rewrite Map是否返回了对应的jp,快速定位问题。

另外别忘了确认服务器上已经安装了IIS的URL Rewrite模块,没装的话一切都是白搭哦!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:34:04