IIS URL重写-将查询字符串键和值更改为路由
我最近在我的一个网站上实现了IIS URL重写。我使用URL重定向,而不是重写所有内容。我所有的静态重定向都工作得很好,但是,有一种特定类型的动态重定向似乎无法正常工作 我有一个像这样的旧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”)完全是动态的,并且事先
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>
工作起来很漂亮。我想我已经很接近了,但似乎是特定的条件和正则表达式捕获我没有完全正确。谢谢你的帮助!