【问题标题】:Url rewrite dont work as expected网址重写不按预期工作
【发布时间】:2015-04-24 03:54:57
【问题描述】:

我们有一个多域网站;同一个 Web 应用程序中的许多“网站”。 我们想将 url 重写为 "www.*" 样式。当您为每个站点执行该站点时,这很简单:

 <rewrite>
  <rules>
    <rule name="Canonical host name">
      <match url="^(.*)" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^www\.mydomainTest\.com$" negate="true" />
      </conditions>
      <action type="Redirect" url="http://www.mydomainTest.com/{R:1}" />
    </rule>
  </rules>
</rewrite>

但是在为任何主机名尝试“规范”正则表达式时我们会遇到一些问题:

  <rewrite>
    <rules>
      <rule name="Canonical host name">
        <match url="^(.*)" />
        <conditions>
          <add input="{HTTP_HOST}" pattern="^([www.]{0,4})([A-Za-z0-9]*)(.com)([.ar]{0,3})$" negate="true" />
        </conditions>
        <action type="Redirect" url="http://www.{R:2}.com{R:4}" />
      </rule>
    </rules>
  </rewrite>

我们在regex101.com 中进行测试,我们正则表达式这样做:

正则表达式 = ^([www.]{0,4})([A-Za-z0-9]*)(.com)([.ar]{0,3})$

1) 域测试 =“www.mydomainTest.com.ar” 结果 =

   {R:1} = www.
   {R:2} = mydomainTest
   {R:3} = .com
   {R:4} = .ar

2) 域测试 = mydomainTest.com.ar 结果 =

   {R:1} = 
   {R:2} = mydomainTest
   {R:3} = .com
   {R:4} = .ar

与 iis 7 中的“URL Rewrite 2.0”结果相同。

我们可以确定正则表达式工作正常,但我们的网页不会按预期重写。如果你访问“www.domain.com.ar”或“domain.com.ar”是一样的,什么都没有发生。但是,如果您使用第一个重写配置一切正常。 我希望我已经清楚地解释了这个问题。

好吧,我们忘记了什么?我们做错了什么?

非常感谢!

【问题讨论】:

  • 第二条规则不起作用,因为 {R:2} 和 {R:4} 值为空。它试图匹配的模式是 ^(.*) 它只会给你 {R:0} 和 {R:1}。
  • 如果我不使用 "" 它应该可以工作吗?

标签: c# .net regex url-rewriting web-config


【解决方案1】:

如果我没记错的话,你是在否定条件,所以你的变量将不存在......

试试这个

    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Canonical host name" stopProcessing="true">
                    <match url=".*" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^(www.)(.*)$" negate="true" />
                    </conditions>
                    <action type="Redirect" url="http://www.{HTTP_HOST}/{R:0}"  appendQueryString="true" redirectType="Permanent"/>
                </rule>
            </rules>
        </rewrite>
    </system.webServer>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2020-01-12
    • 2016-06-10
    • 1970-01-01
    相关资源
    最近更新 更多