如何在 IIS-8 web.config 中将浏览器重定向到 URL 中的新版本号(目录)?
How to redirect browser to new version number (directory) in URL in IIS-8 web.config?
我试过使用这个 web.config (IIS-8):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".woff2" mimeType="font/woff2" />
</staticContent>
<rewrite>
<rules>
<rule name="Old version to new" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^help\.mysite\.com\/1\.2\/(.*)" />
</conditions>
<action type="Redirect" url="http://help.mysite.com/1.3/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule>
</rules>
</rewrite>
...
</system.webServer>
</configuration>
此配置在尝试加载网站的任何部分时生成 500 个错误。
我只想更新 URL 中的版本号,这样每个人都可以继续访问他们试图访问的内容,只需使用较新的版本。完整的 link 可能是:
http://help.mysite.com/1.2/Content/Widgets/installingWidgets.htm
理想情况下,当服务器开始为该页面提供服务时,它会应用重定向规则,而客户端最终会得到:
http://help.mysite.com/1.3/Content/Widgets/installingWidgets.htm(以及原始请求中可能存在的任何查询字符串)
我完全凭记忆写这篇文章,所以如果不是 100% 正确,我深表歉意。我非常乐意在评论中进行讨论。
首先,我们不需要 <match/>
语句,因为我们正在使用条件。
其次,与HTTP_HOST匹配以找到匹配的“1.2”URL是不正确的。 HTTP_HOST 仅包含 URI 的主机部分,即 help.mysite.com。相反,我们需要匹配 REQUEST_URI,并且我们可能需要模式 ^/1\.2\/(.*)
.
您所写的操作似乎是正确的。
试一试,看看会发生什么。
<rule name="Old version to new" stopProcessing="true">
<conditions>
<add input="{REQUEST_URI}" pattern="^/1\.2\/(.*)" />
</conditions>
<action type="Redirect" url="http://help.mysite.com/1.3/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule>
这很简单,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect 1.2 to 1.3" stopProcessing="true">
<match url="^1\.2/(.*)" />
<action type="Redirect" url="1.3/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我对此进行了测试,它确实进行了永久 (301) 重定向并保留了查询字符串。
GET http://localhost/1.2/a/b?c=d&e=f HTTP/1.1
User-Agent: Fiddler
Host: localhost
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: http://localhost/1.3/a/b?c=d&e=f
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Wed, 14 Dec 2016 20:25:11 GMT
Content-Length: 159
<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="http://localhost/1.3/a/b?c=d&e=f">here</a></body>
使用 <match>
标签的好处是输入 url 将包含 application path 右侧的所有内容,因此即使帮助站点位于虚拟目录中,例如,在开发人员的机器上。
我试过使用这个 web.config (IIS-8):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".woff2" mimeType="font/woff2" />
</staticContent>
<rewrite>
<rules>
<rule name="Old version to new" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^help\.mysite\.com\/1\.2\/(.*)" />
</conditions>
<action type="Redirect" url="http://help.mysite.com/1.3/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule>
</rules>
</rewrite>
...
</system.webServer>
</configuration>
此配置在尝试加载网站的任何部分时生成 500 个错误。
我只想更新 URL 中的版本号,这样每个人都可以继续访问他们试图访问的内容,只需使用较新的版本。完整的 link 可能是: http://help.mysite.com/1.2/Content/Widgets/installingWidgets.htm
理想情况下,当服务器开始为该页面提供服务时,它会应用重定向规则,而客户端最终会得到:
http://help.mysite.com/1.3/Content/Widgets/installingWidgets.htm(以及原始请求中可能存在的任何查询字符串)
我完全凭记忆写这篇文章,所以如果不是 100% 正确,我深表歉意。我非常乐意在评论中进行讨论。
首先,我们不需要 <match/>
语句,因为我们正在使用条件。
其次,与HTTP_HOST匹配以找到匹配的“1.2”URL是不正确的。 HTTP_HOST 仅包含 URI 的主机部分,即 help.mysite.com。相反,我们需要匹配 REQUEST_URI,并且我们可能需要模式 ^/1\.2\/(.*)
.
您所写的操作似乎是正确的。
试一试,看看会发生什么。
<rule name="Old version to new" stopProcessing="true">
<conditions>
<add input="{REQUEST_URI}" pattern="^/1\.2\/(.*)" />
</conditions>
<action type="Redirect" url="http://help.mysite.com/1.3/{R:1}" redirectType="Permanent" appendQueryString="true" />
</rule>
这很简单,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect 1.2 to 1.3" stopProcessing="true">
<match url="^1\.2/(.*)" />
<action type="Redirect" url="1.3/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我对此进行了测试,它确实进行了永久 (301) 重定向并保留了查询字符串。
GET http://localhost/1.2/a/b?c=d&e=f HTTP/1.1
User-Agent: Fiddler
Host: localhost
HTTP/1.1 301 Moved Permanently
Content-Type: text/html; charset=UTF-8
Location: http://localhost/1.3/a/b?c=d&e=f
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Wed, 14 Dec 2016 20:25:11 GMT
Content-Length: 159
<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="http://localhost/1.3/a/b?c=d&e=f">here</a></body>
使用 <match>
标签的好处是输入 url 将包含 application path 右侧的所有内容,因此即使帮助站点位于虚拟目录中,例如,在开发人员的机器上。