2013-10-09 227 views
3

我正在寻找使用IIS重写模块2.0重定向一些损坏的应用程序链接。使用IIS URL重定向子文件夹到子域/子文件夹重写

此前,www.mydomain.com是我们的公司网站,www.mydomain.com/application1,www.mydomain.com/application2是我们客户使用的其他应用程序。他们都在同一台服务器上。

现在我们正在更新我们的公司网站并将其移至另一台服务器。所以www.mydomain.com和mydomain.com解析为不同的服务器。作为这项工作的一部分,创建了app.mydomain.com的一个子域来容纳仍驻留在我们服务器上的客户应用程序。

我想要做的就是在新公司网站的服务器上安装重写模块,并将www.mydomain/application1或mydomain.com/application1重定向到app.mydomain.com/application1。

我有列表应用程序,所以也许使用rewriteMap是要走的路?这将阻止任何重定向,如www.mydomain.com/newcorporateurl被错误地重定向。我还需要保留子文件夹和querystrings(由于有浏览器书签的人),例如www.mydomain.com/application1/index.aspx?id=1需要转到app.mydomain.com/application1/index.aspx?id= 1

任何帮助把它放在一起会很棒!即使只是获得基本的配置排序,所以我可以有一个发挥和理解它多一点。我一直在浏览其他问题和资源,但我仍然在努力如何把这个一起

更新1

以下不工作,但希望它证明什么,我试图做的。 我有大约15个或我需要以这种方式重定向的应用程序。

<rewrite> 
    <rules> 
     <rule name="application1 rule" stopProcessing="true"> 
      <match url="(www\.)?mydomain\.com(:80)?/application1/?" /> 
      <action type="Redirect" url="app.mydomain.com/application1/" appendQueryString="false" /> 
     </rule> 
     <rule name="application2 rule" stopProcessing="true"> 
      <match url="(www\.)?mydomain\.com(:80)?/application2/?" /> 
      <action type="Redirect" url="app.mydomain.com/application2/" appendQueryString="false" /> 
     </rule> 
    </rules> 
</rewrite> 

更新2

我已经该工作的程度

<rewrite> 
    <rules> 
     <clear /> 
     <rule name="application1 rule" stopProcessing="true"> 
      <match url="application1(.*)" /> 
      <conditions> 
       <add input="{HTTP_HOST}" pattern="mydomain.com" /> 
      </conditions> 
      <action type="Redirect" url="http://app.mydomain.com/application1{R:1}" /> 
     </rule> 
    </rules> 
</rewrite> 

这将重定向

www.mydomain.com/application1 - > app.mydomain.com/application1 www.mydomain.com/application1/index.aspx - > app.mydomain.com/application1/index.aspx

我现在要解决的问题是这个。

www.mydomain.com上的新网站是CMS。通过上述规则,这意味着CMS不能在URI中包含'application1'。

现实世界的例子是 '商业'

能有人帮我提炼规则,使符合下列条件

www.mydomain.com/commercial - > app.mydomain.com/commercial WWW。 mydomain.com/commercial/foo/index.aspx - > app.mydomain.com/foo/index.aspx

www.mydomain.com/tv-commercials/list - > www.mydomain.com/tv-commercials/list www.mydomain.com/commercial-property/list - > www.mydomain。com/commercial-property/list

+0

你有多少个应用程序?任何模式在这里? (比如'app'开头)到目前为止,你有尝试过什么吗? – cheesemacfly

+0

@cheesemacfly我已经用我的出发点更新了这个问题。它不起作用,但希望证明我正在努力实现的目标 –

回答

1

这就是我最后的结果。

如果URI是www.mydomain.com/application1,则第一条规则只是重定向到尾部斜线。

第二条规则重定向到忽略大小写的子域,保留查询字符串并将其视为永久重定向。

<rule name="Trailing Slash Redirect" stopProcessing="true"> 
    <match url="^(application1|application2)$" ignoreCase="true" /> 
    <action type="Redirect" url="{R:0}/" redirectType="Permanent" /> 
</rule> 
<rule name="Http App Redirect" stopProcessing="true"> 
    <match url="^(application1/.*|application2/.*)$" ignoreCase="true" /> 
    <action type="Redirect" url="http://app.mydomain.com/{R:0}" redirectType="Permanent" /> 
</rule> 

如果我需要重定向到Https,我会创建另一个规则。

+0

接受这个答案,因为这最终满足了我的需求 –