具有多个QueryString参数的Asp.net 301重定向

时间:2017-12-03 19:15:57

标签: asp.net redirect url-rewriting web-config query-string

我有像

这样的网址
domain.com/posts/id/title

我想更改网址

domain.com/title-xxx-id

id和title查询字符串参数。 -xxx-是静态的。

我用过

 <rule name="Redirect to WWW" stopProcessing="true">

  <match url=".*" />

  <conditions>

    <add input="{HTTP_HOST}" pattern="^olddomain.com$" />

  </conditions>

  <action type="Redirect" url="https://newdomain.com/{R:0}"

       redirectType="Permanent" />

</rule>

到域名更改,但现在我需要在同一个域中更改网址,我有两个参数

1 个答案:

答案 0 :(得分:1)

在同一个域中,使用URLRewrite (2.x)重定向更简单。这样的事情。

  <rule name="friendly" stopProcessing="true">
    <match url="^post/(.+)/(.+)$" negate="false" />
    <action type="Redirect" url="{R:1}-xxx-{R:2}" appendQueryString="false" />
  </rule>

但实际上你需要将title-xxx-id url发送给处理程序来处理。您可以这样做(假设post是您使用的控制器)。

  <rule name="friendly1" stopProcessing="true">
    <match url="^(.+)-xxx-(\d+)$" negate="false"/>
    <action type="Rewrite" url="/post?title={R:1}&amp;id={R:2}" appendQueryString="false"/>
  </rule>

事实上,这两条规则可以协同工作。

  <rule name="friendly" stopProcessing="false">
    <match url="^post/(.+)/(.+)$" negate="false" />
    <action type="Redirect" url="{R:1}-xxx-{R:2}" appendQueryString="false" />
  </rule>
  <rule name="friendly1" stopProcessing="true">
    <match url="^(.+)-xxx-(\d+)$" negate="false"/>
    <action type="Rewrite" url="/post?title={R:1}&amp;id={R:2}" appendQueryString="false"/>
  </rule>