iis - IIS URL 重写 - 将查询字符串键和值更改为路由
问题描述
我最近在我的一个网站上实现了 IIS URL 重写。我正在使用 URL 重定向而不是重写所有内容。我所有的静态重定向都运行良好,但是,有一种特定类型的动态重定向我似乎无法正常工作。
我有看起来像这样的旧 URL:
http://example.com/?tag=mytag
我希望将其重定向到新的 URL 格式:
http://example.com/tag/mytag
对于这些 URL,查询字符串键(标签)是已知和固定的,但是,查询字符串值(上例中的“mytag”)是完全动态的并且事先未知(所以我不相信因此可以使用 IIS Rewrite Maps )。
是否可以添加一个 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>
推荐阅读
- sql - Oracle SQL SAVEPOINT 问题
- tfs - 在创建新分支时选择前缀名称
- php - 我可以在使用代理时隐藏域吗?
- r - 函数内的计数(dplyr)问题
- javascript - 如果当前时间与时间选择器值匹配,则从时间选择器自动选择时间,每 5 分钟将当前时间与时间选择器进行比较
- reactjs - 有没有可能使用 jest 测试单元测试函数变量?
- c# - 异步操作挂起/死锁,为什么?(不等待Result,也不ConfigurationAwait)
- c++ - 为什么 SFINAE 不能跨多重继承工作?
- python - Fillna Pandas NaN 的平均值和中位数
- c - 为什么数据不保存到指针数组中?