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