IIS URL重写-将查询字符串键和值更改为路由

IIS URL重写-将查询字符串键和值更改为路由,iis,dynamic,url-rewriting,url-rewrite-module,Iis,Dynamic,Url Rewriting,Url Rewrite Module,我最近在我的一个网站上实现了IIS URL重写。我使用URL重定向,而不是重写所有内容。我所有的静态重定向都工作得很好,但是,有一种特定类型的动态重定向似乎无法正常工作 我有一个像这样的旧URL: http://example.com/?tag=mytag 我希望将其重定向到新的URL格式: http://example.com/tag/mytag 对于这些URL,querystring键(标记)是已知和固定的,但是querystring值(“上面示例中的mytag”)完全是动态的,并且事先

我最近在我的一个网站上实现了IIS URL重写。我使用URL重定向,而不是重写所有内容。我所有的静态重定向都工作得很好,但是,有一种特定类型的动态重定向似乎无法正常工作

我有一个像这样的旧URL:

http://example.com/?tag=mytag
我希望将其重定向到新的URL格式:

http://example.com/tag/mytag
对于这些URL,querystring键(标记)是已知和固定的,但是querystring值(“上面示例中的mytag”)完全是动态的,并且事先未知(因此我认为不可能使用IIS重写映射)


是否可以添加IIS重写规则,对可能提供的所有可能的querystring值执行此类重定向?

是的,解决方案的核心如下。发生的事情是

第一个条件意味着仅将此规则应用于站点的顶层。所以
http://example.com/?tag=mytag
将重定向,而
http://example.com/foobar/?tag=mytag
不会

第二个条件是魔法。它仅在名为
标记
的查询参数存在且
(.*)
是用于获取新URL中使用的值的正则表达式时运行

该操作使用您在第二个条件中获取的值,该条件被引用为
{C:1}
。appendQueryString完全按照它所说的做—根据需要进行设置。重定向类型应保留为
临时
(HTTP响应代码307),直到您满意为止,然后将其更改为
永久
(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>

工作起来很漂亮。我想我已经很接近了,但似乎是特定的条件和正则表达式捕获我没有完全正确。谢谢你的帮助!