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