regex - IIS URL 重写,URL 中的条件更改

标签 regex iis url-rewriting iis-7 url-rewrite-module

我有一组两个 IIS URL 重写规则,基于“UserFriendlyURL”自动规则。这两条规则的要点是采用前两个查询字符串参数(Type 和 Series)并将它们转换为用户友好的 URL。 如果用户与该页面上的搜索进行交互,此页面可能会将您带回此页面,但带有其他查询字符串参数,例如“page”或“pageSize”。

我希望那些非类型/系列参数保留为查询字符串参数,因为它们不是友好 URL 的一部分,但如果这些项目存在,我希望页面向下滚动到搜索对象(因为它是很明显,用户只是与之交互)。

为此,我想我想做的是在末尾添加一个位置哈希 (#search)。而不是遍历该页面上的每个搜索词并手动将“#search”添加到末尾(其中许多实际上是点击操作,我不想编辑每个 JS 方法以将其添加到生成的 URL 的末尾),最好只捕获任何查询字符串参数(类型/系列除外)存在的事实,如果存在,则将“#search”添加到 URL 的末尾。

这可行吗?如果可行,怎么做?我知道正则表达式中的条件: 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>

最佳答案

所以,据我所知,这个问题的答案是—— 像我描述的那样设置散列对于一个是不可能的,但是对于两个,我可以重定向 ^Type=([^=&]+)&Series=([^=&]+)& (.+) 到不同的 URL,{R:1}/product-details/{C:1}/{C:2}?{C:3}#search。 AppendQueryString 在这里是假的,因为我已经用 &(.+) => ?{C:3}

捕获了其他查询字符串

不过,我还找到了另一种解决方案,即只使用 Javascript/JQuery 动画,在 JavaScript 中检测适当的情况(在这种情况下,检查其他查询字符串),然后让 JS 滚动到适当的 anchor 。这完全避免了使用 IIS 重写,并使用最少的 javascript。

关于regex - IIS URL 重写,URL 中的条件更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35803303/

相关文章:

java - 替换捕获组

iis - Parallels 桌面 : access local IIS web application from OS X (host)

asp.net - 使用 ETW 捕获传入 HTTP 请求和传出 HTTP 请求

通过 HTTPS 的 WCF REST

apache - 多个 htaccess 中的 mod_rewrite 协同工作

正则表达式在 Go 中不匹配

javascript - 如何获取 "add_"前面的字符

regex - 如何从字符串中删除第一个和最后一个破折号?

php - .htaccess - 如何隐藏 .php 网址?

php - 我需要学习专业的PHP网站开发