IIS URL 重写 - 将查询字符串键和值更改为路由
IIS URL Rewriting - Change a querystring key and value into a route
我最近在我的一个网站上实施了 IIS URL 重写。我正在使用 URL 重定向而不是重写所有内容。我所有的静态重定向都运行良好,但是,有一种特定类型的动态重定向我似乎无法使用。
我有旧的 URL 看起来像这样:
http://example.com/?tag=mytag
我希望将其重定向到新的 URL 格式:
http://example.com/tag/mytag
对于这些 URL,查询字符串键(标签)是已知且固定的,但是,查询字符串值(上例中的 "mytag")是完全动态的并且事先未知(因此我不认为因此可以使用 IIS 重写映射)。
是否可以添加一个 IIS 重写规则来对可能提供的所有可能的查询字符串值执行这种重定向?
是的,解决方案的内容如下。这是怎么回事...
第一个条件表示仅将此规则应用于网站的顶级。所以 http://example.com/?tag=mytag
会重定向,而 http://example.com/foobar/?tag=mytag
不会。
第二个条件是魔法。它仅在存在名为 tag
的查询参数时运行,并且 (.*)
是一个正则表达式,用于获取用于新 URL 的值。
该操作使用您在第二个条件中获取的值 {C:1}
。 appendQueryString 完全按照它说的做 - 适当设置。 redirectType 应保留为 Temporary
(HTTP 响应代码 307),直到您满意为止,然后将其更改为 Permanent
(HTTP 响应代码 301)。一旦您发送 301 响应,客户端(/搜索引擎)可能会缓存该响应,并且不会从服务器重新请求,如果您犯了错误,则会导致问题。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect based on tag query value">
<conditions>
<add input="{REQUEST_URI}" pattern="$" />
<add input="{QUERY_STRING}" pattern="tag=(.*)" />
</conditions>
<action type="Redirect" url="tag/{C:1}/" appendQueryString="false" redirectType="Temporary" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
我最近在我的一个网站上实施了 IIS URL 重写。我正在使用 URL 重定向而不是重写所有内容。我所有的静态重定向都运行良好,但是,有一种特定类型的动态重定向我似乎无法使用。
我有旧的 URL 看起来像这样:
http://example.com/?tag=mytag
我希望将其重定向到新的 URL 格式:
http://example.com/tag/mytag
对于这些 URL,查询字符串键(标签)是已知且固定的,但是,查询字符串值(上例中的 "mytag")是完全动态的并且事先未知(因此我不认为因此可以使用 IIS 重写映射)。
是否可以添加一个 IIS 重写规则来对可能提供的所有可能的查询字符串值执行这种重定向?
是的,解决方案的内容如下。这是怎么回事...
第一个条件表示仅将此规则应用于网站的顶级。所以 http://example.com/?tag=mytag
会重定向,而 http://example.com/foobar/?tag=mytag
不会。
第二个条件是魔法。它仅在存在名为 tag
的查询参数时运行,并且 (.*)
是一个正则表达式,用于获取用于新 URL 的值。
该操作使用您在第二个条件中获取的值 {C:1}
。 appendQueryString 完全按照它说的做 - 适当设置。 redirectType 应保留为 Temporary
(HTTP 响应代码 307),直到您满意为止,然后将其更改为 Permanent
(HTTP 响应代码 301)。一旦您发送 301 响应,客户端(/搜索引擎)可能会缓存该响应,并且不会从服务器重新请求,如果您犯了错误,则会导致问题。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Redirect based on tag query value">
<conditions>
<add input="{REQUEST_URI}" pattern="$" />
<add input="{QUERY_STRING}" pattern="tag=(.*)" />
</conditions>
<action type="Redirect" url="tag/{C:1}/" appendQueryString="false" redirectType="Temporary" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>