IIS URL Rewrite,URL的条件修改

3
我有一组基于"UserFriendlyURL"自动规则的两个IIS URL Rewrite规则。这两个规则的目的是将前两个查询字符串参数(类型和系列)转换为用户友好的URL。
如果用户与此页面上的搜索交互,该页面可能会将您带回此页面,但使用其他查询字符串参数,例如"page"或"pageSize"。
我希望这些非类型/系列参数保留为查询字符串参数,因为它们不是友好URL的一部分,但如果存在这些项,则希望页面滚动到搜索对象(因为显然用户刚刚与其交互)。
为此,我认为我想要做的是在结尾添加一个位置哈希(#search)。而不是在该页面上的每个搜索术语中手动添加"#search"(其中许多实际上是onclick操作,我不想编辑每个JS方法以将其添加到生成的URL的末尾),最好只需捕获任何查询字符串参数(除了类型/系列)存在的事实,如果存在,则在URL的末尾添加"#search"。

这可行吗?如果可以,怎么做呢?我知道正则表达式中的条件语句:http://www.regular-expressions.info/conditional.html,但我不认为它们在这种情况下适用(如果我错了,我会很高兴)。

<rewrite>
  <rules>
    <rule name="RedirectUserFriendlyURL1" stopProcessing="true">
      <match url="^(cn/)?/product-details$" />
      <conditions>
        <add input="{REQUEST_METHOD}" pattern="^POST$" negate="true" />
        <add input="{QUERY_STRING}" pattern="^Type=([^=&amp;]+)&amp;Series=([^=&amp;]+)$" />
      </conditions>
      <action type="Redirect" url="{R:1}/product-details/{C:1}/{C:2}" appendQueryString="false" />
    </rule>
    <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
      <match url="^(cn/)?/product-details/([^/]+)/([^/]+)$" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="{R:1}/product-details?Type={URLEncode:{R:2}}&amp;Series={URLEncode:{R:3}}" />
    </rule>
  </rules>
</rewrite>
1个回答

2
据我所知,对于这个问题的答案是 - 用一个哈希值设置不可能实现,但是用两个哈希值可以将 ^Type=([^=&amp;]+)&amp;Series=([^=&amp;]+)&amp;(.+) 重定向到另一个URL,{R:1}/product-details/{C:1}/{C:2}?{C:3}#search。这里 AppendQueryString 是 false,因为我已经使用 &amp;(.+) 捕获了其他查询字符串 => ?{C:3} 然而,我还发现了一种替代方案,即只需使用Javascript/JQuery动画,在JavaScript中检测适当的情况(在本例中,检查其他查询字符串),然后让JS滚动到适当的锚点。这避免了需要使用IIS重写,并且使用最少的javascript。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接