重定向到其他域,同时保留子域和查询参数,并使用web.config强制执行https

时间:2019-07-04 04:22:01

标签: asp.net iis

仅使用Web.config,我需要将所有流量重定向到新域,而且: 1)保留子域 2)保留查询参数 3)在执行上述操作时,如果将“ http”而非“ https”更改为“ https”

我可以轻松地处理HTTPS的强制实施,并且我看到了很多有关域重定向的参考,但是没有找到任何在更改为根域时保留子域的信息。

<rewrite>
  <rules>
    <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
      <match url="^(.*)$" />
      <conditions trackAllCaptures="true">
        <add input="{HTTPS}" pattern="^OFF$" />
        <add input="{HTTP_HOST}" matchType="Pattern" pattern="^localhost(:\d+)?$" negate="true" />
        <add input="{HTTP_HOST}" matchType="Pattern" pattern="^127\.0\.0\.1(:\d+)?$" negate="true" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
    </rule>       
  </rules>
</rewrite> 

'上面的方法可以将http更改为https,但是对于更改域名没有帮助。我还在下面看到了几乎可行的方法:'

<rule name="redirect" enabled="true">
  <match url="(.*)" />
  <conditions>
    <add input="{HTTP_HOST}" negate="false" pattern="^(.*)\.foo\.com" />
  </conditions>
  <action type="Redirect" url="https://{C:1}.bar.com/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>

...but removes the subdomain:

http://x.foo.com> https://.bar.com

它需要做什么的例子:

http://x.foo.com> https://x.bar.com

https://y.foo.com> https://y.bar.com

https://x.foo.com/blah.aspx?param=blue > https://x.bar.com/blah.aspx?param=blue

http://y.foo.com/blah.aspx?param=blue > https://y.bar.com/blah.aspx?param=blue

1 个答案:

答案 0 :(得分:0)

好的,我想出了以下解决方案,该解决方案完全可以满足我的需要(请参见上述要求)。为此,我添加了两个独立的规则块:一个用于确保HTTPS,另一个用于在必要时重定向到另一个域。我认为,如果访问需要1)HTTP到HTTPS以及2)直接到新域(从* .foo.com> * .bar.com),这会使访问量增加一倍,但至少可以正常工作。不确定是否可以将其调整为一条规则以保存匹配?

   <rewrite>
      <rules>
        <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
          <match url="^(.*)$" />
          <conditions trackAllCaptures="true">
            <add input="{HTTPS}" pattern="^OFF$" />
            <add input="{HTTP_HOST}" matchType="Pattern" pattern="^localhost(:\d+)?$" negate="true" />
            <add input="{HTTP_HOST}" matchType="Pattern" pattern="^127\.0\.0\.1(:\d+)?$" negate="true" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther"/>
        </rule>
        <rule name="Redirect to new domain" enabled="true">
          <match url="(.*)$" />
          <conditions trackAllCaptures="true">
            <add input="{HTTP_HOST}" negate="false" pattern="^(.*)\.foo\.com" />
          </conditions>
          <action type="Redirect" url="https://{C:1}.bar.com/{R:1}" appendQueryString="true" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>