EPiServer,id作为查询字符串中的键,由url-rewriter劫持,使用重写器指定位置?

时间:2013-11-15 09:28:58

标签: c# asp.net url-rewriting query-string episerver

我已经重写了一个旧的应用程序,然后有很多外部应用程序重定向到一个包含?id = {someid}查询字符串的特定网址。但是.. episerver似乎用id-key做了一些事情。因为它永远不会显示在Request.QueryStrings.AllKeys中。所以我的猜测是epi正在进行某种url重写或其他东西..有没有办法解决这个问题并能够只使用id-key具体页面/位置?

2 个答案:

答案 0 :(得分:0)

查询字符串参数id由EPiServer保留。你需要在EPi接触之前检查它。

更新:如果您升级到EPi 7.5,除非您注册EPiServer.Web.Routing.ClassicLinkRoute,否则EPi不再处理查询参数“ID”。

答案 1 :(得分:0)

我建议使用IIS 7 url重写模块将id querystring键转换为不会与EPiServer冲突的内容,因为在url中转换友好url后,id用于EPiServers内部url中的页面ID重写提供者。 IIS url重写模块可让您在点击EPiServer之前更改此内容。

您可以编写正则表达式来捕获id参数,因此您可以将以下规则添加到重写配置中

    <rule name="QueryString">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{QUERY_STRING}" pattern="(.*)id=([a-zA-Z0-9_-]+)(.*)" />
      </conditions>
      <action type="Rewrite" url="{R:1}?{C:1}oldid={C:2}{C:3}" appendQueryString="false" />
    </rule>

哪个会将网址重写为/ my-url-path /? oldid = 123 &amp; another = param

有关如何在IIS网址重写模块here

中实施规则的更多信息