【问题标题】:IIS Rewrite very confusingIIS Rewrite 很混乱
【发布时间】:2021-02-25 10:53:06
【问题描述】:

关于 IIS 重写。

我想在我的本地 IIS 实例上更改此 url

http://localhost/MySite/health?key=BczI5MyulpRLxI2kiJmIXwLOm78r3qr8z2gwcsYTGR4=&c

重定向到这个网址:

http://localhost/MySite/Health.svc/BczI5MyulpRLxI2kiJmIXwLOm78r3qr8z2gwcsYTGR4=/c

如您所见,我不希望使用传入请求

Health.svc/BczI5MyulpRLxI2kiJmIXwLOm78r3qr8z2gwcsYTGR4=/c

改为使用

health?key=BczI5MyulpRLxI2kiJmIXwLOm78r3qr8z2gwcsYTGR4=&c

Health.svc 是 WCF 端点名称,所以我只希望 /health 带有键和过滤器参数,如图所示。

无论我在我的网络配置中添加什么重写它仍然不起作用。我很困惑要输入什么网址,因为正则表达式似乎是有效的,因为我可以在 IIS 和在线正则表达式验证器中对其进行测试。

<rewrite>
  <rules>
    <rule name="HealthRewrite" stopProcessing="true" enabled="true">
      <match url="MySite\/health\?key=([0-9a-zA-Z=]+)&amp;([a-z])" />
      <action type="Rewrite" url="MySite/Health.svc/{R:1}/{R:2}" appendQueryString="false" />
    </rule>
  </rules>
</rewrite>

我怎样才能让它工作?我已经安装了重写模块,可以在 IIS 中看到它,也可以看到 dll 已注册。

【问题讨论】:

    标签: wcf iis url-rewriting iis-7.5


    【解决方案1】:

    如果要在 IIS 中匹配查询字符串的值,则需要使用 {QUERY_STRING}。这是一个演示:

          <rewrite>
                <rules>
                    <rule name="Test">
                        <match url="(Service1)" />
                        <conditions>
                            <add input="{QUERY_STRING}" pattern="(key)=(.*)" />
                        </conditions>
                        <action type="Rewrite" url="Service1.svc/{C:2}" />
                    </rule>
                </rules>
            </rewrite>
    

    这是我的 web.config。

    这个网址:

    http://localhost/Service1?key=getdata

    将重定向到这个网址:

    http://localhost/Service1.svc/GetData

    对于您的最后一个问题,为什么要添加 MySite 前缀?这是因为 Rewrite URL 中的 URL 将用作重定向 URL。请注意,它使用反向引用来保留和重新排列在模式匹配期间捕获的原始 URL 片段。对于 Rewrite,必须在 Rewrite URL 中提供除 localhost 之外的所有前缀。

    【讨论】:

    • 感谢详细信息分解,非常感谢
    【解决方案2】:

    我设法让它可以访问各种网站,因为它根本不明显。

    他们的关键似乎是把条件放进去,然后是一个带有正则表达式的 {QUERY_STRING},然后可以创建 {C:1} 和 {C:2} 组,这些组被推入新的重写

    <rewrite>
      <rules>
        <rule name="HealthRewrite" stopProcessing="true" enabled="true">
          <match url="^health" />
          <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
            <add input="{QUERY_STRING}" pattern="key=([0-9a-zA-Z=]+)&amp;([a-z])" />
          </conditions>
          <action type="Rewrite" url="/MySite/Health.svc/{C:1}/{C:2}" appendQueryString="false"/>
        </rule>
      </rules>
    </rewrite>
    

    我发现知道要匹配哪个 url 令人困惑,但通过一些简单的 ^health 测试,我可以更容易地看到并尝试获取查询字符串参数。我必须为 Rewrite 提供 /MySite/ 前缀,这令人困惑,因为匹配不需要它!

    【讨论】:

    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 2019-02-01
    • 2011-11-05
    • 2015-09-19
    • 1970-01-01
    • 2014-12-14
    • 2012-04-03
    • 2010-11-30
    相关资源
    最近更新 更多