IIS 7.5 URL重写 - 替换域

时间:2015-03-10 08:40:30

标签: iis url-rewriting

https://stackoverflow.com/questions/26840890/i-need-to-change-domain-with-iis-7-5-url-rewrite可能重复(尚未答复)

我有以下网址

www.myolddomain.com/somefolder-a
www.myolddomain.com/somefolder-b
www.myolddomain.com/somefolder-c
...

我希望有一条规则可以将包含myolddomain.com/somefolder的每个请求重定向到www.mynewdomain.com/somefolder,并带有上面的后缀,例如-a

到目前为止,我的规则如下:

<rule name="Redirect from old domain" enabled="true" stopProcessing="true">
  <match url="(.*)myolddomain.com/somefolder(.*)" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
  </conditions>
  <action type="Redirect" url="https://www.mynewdomain.com/somefolder{R:2}" />
</rule>

此规则无效。

我在这里犯了错误吗? 或者可以在IIS之前的其他地方重定向请求?

根据防火墙管理员,防火墙不会发生重定向。可能是别的吗?

1 个答案:

答案 0 :(得分:0)

通过进一步的反复试验,我找到了一个解决方案:

<rule name="Redirect from old domain" stopProcessing="true">
    <match url=".*" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{HTTP_HOST}" pattern="myolddomain.com" />
        <add input="{HTTP_URL}" pattern="/somefolder(.*)" />
    </conditions>
    <action type="Redirect" url="https://www.mynewdomain.com/somefolder{C:1}" />
</rule>

为了好奇,规则级别的匹配应该如何运作?无论我放在那里,只要它不是。*规则被忽略。

暗示其他人:不要陷入思考服务器变量的陷阱,例如&#34; HTTP_URL&#34;实际上包含URL - 他们没有。最好的方法来弄清楚哪个变量真的是这样的样本页面(从网上复制 - 我为失去链接道歉):

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Server Variables</title>
</head>
<body>
<table>
<tr>
<th>Server Variable</th>
<th>Value</th>
</tr>
<tr>
<td>HTTP_URL: </td>
<td><%= Request.ServerVariables["HTTP_URL"] %></td>
</tr>
<tr>
<td>Replace above server variable to retrieve different variables</td>
</tr>
</table>
</body>
</html>