IIS 7.5 URL重写:重定向规则似乎无法从旧域运行到新域

时间:2015-06-02 14:40:16

标签: asp.net-mvc-4 url redirect iis url-rewrite-module

我试图理解为什么当一个人试图进入该网站时,IIS中创建的以下规则无效。

基本上我们有一个旧域和一个新域。我希望任何访问旧域的人都可以重定向到我们新域名的着陆页。

我正在为网站使用ASP MVC4,我也为域添加了绑定并更新了DNS。

我的规则是:

               <rule name="http://www.olddomain.com to landing page" patternSyntax="Wildcard" stopProcessing="true">
                <match url="*" />
                <action type="Redirect" url="http://www.new-domain.co.uk/LandingPage" />
                <conditions logicalGrouping="MatchAny">
                    <add input="{HTTP_HOST}" pattern="http://www.olddomain.com" />
                    <add input="{HTTP_HOST}" pattern="http://olddomain.com" />
                    <add input="{HTTP_HOST}" pattern="http://www.olddomain.com/" />
                    <add input="{HTTP_HOST}" pattern="http://olddomain.com/" />
                </conditions>
            </rule> 

如果有人输入旧的域名地址,重定向不会做任何事情,网站只会加载,就像您通过新域名进入主页一样。

有人可以告诉我这里哪里出错吗?

更新 下面提供的规则似乎仍然不起作用所以我决定尝试在fiddler中打开我的旧域地址,看看我是否能看到重定向或响应。我得到的只是200 HTTP响应,仅此而已。这让我觉得重写规则实际上被忽略了,但我不知道为什么。

2 个答案:

答案 0 :(得分:1)

{HTTP_HOST}将始终只是主机名,不包括协议或路径。尝试将规则更改为:

<rule name="http://www.olddomain.com to landing page" patternSyntax="Wildcard" stopProcessing="true">
    <match url="*" />
    <action type="Redirect" url="http://www.new-domain.co.uk/LandingPage" />
    <conditions logicalGrouping="MatchAny">
        <add input="{HTTP_HOST}" pattern="^www\.olddomain\.com$" />
        <add input="{HTTP_HOST}" pattern="^olddomain\.com$" />
    </conditions>
</rule> 

答案 1 :(得分:0)

我在这方面已经挣扎了好几天。我试过的10-20重写规则和失败的原因是:

  1. 如果您尝试在VisualStudio中重定向(2012/2013/2015),它无法在实际的IIS托管网站中工作,因为VS在调试时(在项目属性中指定时)生成自己的证书以及权限问题由VS
  2. IIS中的站点应该有效(没有来自解冻/启用verisign的网站的文件复制粘贴,甚至是snk.exe生成的自签名)证书;请不要假设没有有效证书就可以。 (IIS 8和10中的自签名(也称为开发证书)为我工作;购买和自签名之间的区别在于https://www.sslshopper.com/article-how-to-create-a-self-signed-certificate-in-iis-7.html)。应安装证书,因为IIS可以有多个证书,但每个网站都应使用自己的单独证书。
  3. 网站绑定应包含http(80)和https(443)
  4. 现在重定向语法出现在图片中;互联网上有几个;你可以轻松获得正确的正则表达式
  5. 还必须考虑故事的另一方面,可以使用MVC 4/5中的Global.asax-&gt; Application_BeginRequest或ActionFilter来处理重定向。 使用config或以编程方式执行重定向可能会导致不同的错误(TOO_MANY_REDIRECTS,在web.config中)
  6. 我遇到的另一个问题是重定向来自http-&gt; https工作正常,但我无法从https-&gt; http中恢复;
  7. 考虑您的场景(通常不应该混合)可用的选择
  8. HttpRedirect:

    Request 1 (from client):    Get file.htm
    Response 1 (from server): The file is moved, please request the file newFileName.htm
    Request 2 (from client):    Get newFileName.htm
    Response 2 (from server): Here is the content of newFileName.htm
    

    UrlRewrite:

    Request 1 (from client):     Get file.htm
    URL Rewriting (on server):   Translate the URL file.htm to file.asp
    Web application (on server): Process the request (run any code in file.asp)
    Response 1 (from server):    Here is the content of file.htm (note that the client does not know that this is the content of file.asp)
    whether you need HttpRedirect or UrlRewrite
    https://weblogs.asp.net/owscott/rewrite-vs-redirect-what-s-the-difference