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之前的其他地方重定向请求?
根据防火墙管理员,防火墙不会发生重定向。可能是别的吗?
答案 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>