【问题标题】:IIS URL Rewriting - Change a querystring key and value into a routeIIS URL 重写 - 将查询字符串键和值更改为路由
【发布时间】:2018-10-20 21:32:26
【问题描述】:

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

我的旧网址看起来像这样:

http://example.com/?tag=mytag

我希望将其重定向到新的 URL 格式:

http://example.com/tag/mytag

对于这些 URL,查询字符串键(标签)是已知且固定的,但是,查询字符串值(上例中的“mytag”)是完全动态的并且事先是未知的(所以我不相信因此可以使用IIS 重写映射)。

是否可以添加一个 IIS 重写规则,对可能提供的所有可能的查询字符串值执行这种重定向?

【问题讨论】:

    标签: iis dynamic url-rewriting url-rewrite-module


    【解决方案1】:

    是的,解决方案的要点如下。这是怎么回事……

    第一个条件意味着仅将此规则应用于站点的顶层。所以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>
    

    【讨论】:

    • 效果很好。我想我已经很接近了,但似乎是我不太正确的特定条件和正则表达式捕获。感谢您的帮助!
    猜你喜欢
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    相关资源
    最近更新 更多