使用IIS URL重写将子文件夹重定向到子域/子文件夹

时间:2013-10-09 02:34:49

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

我正在考虑使用IIS Rewrite Module 2.0重定向一些损坏的应用程序链接。

以前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这样的重定向被错误地重定向。我还需要保存子文件夹和查询字符串(由于有浏览器书签的人),例如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 - &gt; app.mydomain.com/application1 www.mydomain.com/application1/index.aspx - &gt; app.mydomain.com/application1/index.aspx

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

www.mydomain.com上的新网站是CMS。根据上述规则,这意味着CMS在URI中根本不能包含“application1”。

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

有人可以帮助改进我的规则,以便以下是真的

www.mydomain.com/commercial - &gt; app.mydomain.com/commercial www.mydomain.com/commercial/foo/index.aspx - &gt; app.mydomain.com/foo/index.aspx

www.mydomain.com/tv-commercials/list - &gt; www.mydomain.com/tv-commercials/list www.mydomain.com/commercial-property/list - &gt; www.mydomain.com/commercial-property/list

1 个答案:

答案 0 :(得分: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,我会创建另一个规则。