IIS 7.5 URL 重写 - 替换域



可能重复 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>

最新更新