【问题标题】:Redirect to a URL that is also a Rewrite?重定向到也是重写的 URL?
【发布时间】:2018-09-24 12:01:32
【问题描述】:

我有一个客户,他有一个网站 (awesomeco.com)。在网站上,他们有一个名为“good-stuff”的产品,网址是 awesomeco.com/good-stuff。他们想移动该文件夹并将其放在 awesomecogoodstuff.com。不幸的是,由于他们使用的是 .net cms,我们无法将该文件夹移到它自己的站点中。我有一个处理重写的重写规则,它工作得很好。

代码如下:

<rule name="awesomecogoodstuff.com rewrite" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="awesomecogoodstuff.com />
<add input="{REQUEST_URI}" pattern="\.png|\.css|\.jpg|\.svg|\.ico|\.icon|\.woff|\.js|\.ttf" negate="true" />
</conditions>
<action type="Rewrite" url="/good-stuff/{R:0}" />
</rule>

不幸的是,客户想要一个重定向规则,该规则将采用 awesomeco.com/good-stuff 并将其发送到 awesomecogoodstuff.com。

我尝试了一些方法,但它们要么不起作用,要么进入重定向循环并崩溃。

例如,这条规则会炸毁网站:

<rule name="redirect to new domain" stopProcessing="true">
<match url="awesomeco.com/good-stuff" />
<action type="Redirect" url="http://awesomecogoodstuff.com" redirectType="Found" />
</rule>

有什么想法或建议吗?

【问题讨论】:

    标签: iis url-rewriting url-redirection url-rewrite-module


    【解决方案1】:

    我可以通过小“hack”来实现这一点。重写时,只需添加查询字符串参数:

    <rule name="awesomecogoodstuff.com rewrite" stopProcessing="true">
        <match url=".*" />
        <conditions logicalGrouping="MatchAll">
            <add input="{HTTP_HOST}" pattern="awesomecogoodstuff.com />
            <add input="{REQUEST_URI}" pattern="\.png|\.css|\.jpg|\.svg|\.ico|\.icon|\.woff|\.js|\.ttf" negate="true" />
        </conditions>
        <action type="Rewrite" url="/good-stuff/{R:0}?rewrite=true" />
    </rule>
    

    然后在你的重定向规则中,检查这个查询字符串是否不存在:

    <rule name="redirect to new domain" stopProcessing="true">
        <match url="^good-stuff" />
        <conditions>
            <add input="{QUERY_STRING}" pattern="redirect=true" negate="true" />
            <add input="{HTTP_HOST}" pattern="^awesomeco.com$" />
        </conditions>
        <action type="Redirect" url="http://awesomecogoodstuff.com" redirectType="Found" />                    
    </rule>
    

    【讨论】:

      【解决方案2】:

      这是一个有点疯狂的解决方案,但它可能会起作用并满足您的需求。

      您可以通过 JavaScript 检查页面加载:

      <script>
      if(window.location.href.indexOf("good-stuff") > -1) {
             window.location = 'http://awesomecogoodstuff.com';
          }
      </script>
      

      它会解决您的问题,并且不会与重写/重定向规则发生冲突。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        • 2011-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-01
        相关资源
        最近更新 更多