可能重复 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
的请求重定向到带有上述后缀(例如 -a
)的www.mynewdomain.com/somefolder
。
到目前为止,我的规则如下所示:
<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 之前的某个其他地方?
根据防火墙管理员的说法,防火墙上不会发生重定向。难道是别的什么?
通过进一步的反复试验,我找到了解决方案:
<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>
出于好奇,规则级别的匹配应该如何工作?无论我放在那里什么,只要是 .* 以外的任何东西,规则就会被忽略。
给其他人的提示:不要陷入认为像"HTTP_URL"这样的服务器变量实际上包含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>