2016-03-04 11 views
3

У меня есть набор из двух правил перезаписи URL-адреса IIS на основе автоматического правила UserFriendlyURL. Суть этих двух правил состоит в том, чтобы перенести первые два параметра querystring (Type и Series) и преобразовать их в удобный для пользователя URL. Эта страница, если пользователь взаимодействует с поиском на ней, может отправить вас на эту страницу, но с другими параметрами строки запроса, такими как «страница» или «pageSize».Переписывание URL-адреса IIS, Условное изменение URL-адреса

Я хочу, чтобы эти параметры не-типа/серии оставались в качестве параметров строки запроса, поскольку они не являются частью дружественного URL-адреса, но если эти элементы существуют, я хочу, чтобы страница прокручивалась вниз до объекта поиска (поскольку очевидно, что пользователь просто взаимодействовал с ним).

С этой целью, я думаю, что я хочу добавить местоположение Hash (#search) до конца. Вместо того, чтобы проходить через каждый поисковый запрос на этой странице и вручную добавлять «#search» до конца (многие из них фактически являются действиями onclick, и я не хочу редактировать каждый JS-метод, чтобы добавить это к концу сгенерированных URL-адресов), было бы неплохо просто зафиксировать тот факт, что существует любой параметр querystring (кроме типа/серии), и если это так, добавьте «#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> 

ответ

2

Таким образом, ответ на этот вопрос, насколько я могу судить - Настройка хэша, как я описал, невозможна с одним, но с двумя, я могу перенаправить ^Type=([^=&amp;]+)&amp;Series=([^=&amp;]+)&amp;(.+) на другой URL-адрес, {R:1}/product-details/{C:1}/{C:2}?{C:3}#search. AppendQueryString ложна, то здесь, потому что я уже захватывая другие строки запроса с &amp;(.+) =>?{C:3}

Однако, я также нашел альтернативное решение, которое просто использовать Javascript/JQuery анимации, обнаружить правильное положение (в этот случай, проверьте другие строки запроса) в JavaScript, а затем прокрутите JS до нужного якоря. Это позволяет избежать необходимости переписывать IIS и использовать минимальный JavaScript.

 Смежные вопросы

  • Нет связанных вопросов^_^