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

标签 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 -> 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

最佳答案

这就是我最终的结果。

如果 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,我将创建另一个规则。

关于url-rewriting - 使用 IIS URL 重写将子文件夹重定向到子域/子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19262076/

相关文章:

c# - 将绝对 URL 分配给 webresources.axd 和 Telerik.Web.UI.WebResource.axd

jquery - 使用 cors 发布 JSON ajax 请求在 IE10/Edge 中不起作用

iis-7 - 使用查询字符串和问号 IIS 7 重写 IIS

http - 带有 ARR : Route soap message to different server depending of the soap content 的 IIS

css - 重写CSS中字体的规则

mysql - cms php 旋律 url 重建所需的重写规则

php - RewriteURL 问题 - PHP

iis - 如何监控通过请求发送的客户端证书?

web-services - 远程客户端无法访问 IIS 7.5 中托管的 Delphi WebService