IIS 7.5 с модулем перезаписи URL Удваивает параметры строки запроса при обратной передаче

StackOverflow https://stackoverflow.com/questions/1108473

  •  12-09-2019
  •  | 
  •  

Вопрос

Я использую IIS 7.5 в Windows 7 RC.Я использую модуль IIS Url Rewrite для перезаписи URL-адресов.

Кажется, все работает нормально, пока я не выполню обратную отправку, нажав на кнопку.Затем он добавляет параметры строки запроса к моему переписанному URL-адресу, вот так:

Переписанный URL-адрес, как он отображается в браузере:http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike

Без перезаписи URL-адреса URL-адрес является:

http://localhost/product.aspx?lang=en&id=1239&title=Gary+Fisher+Hkek+Mountain+Bike

Когда я нажимаю кнопку, чтобы выполнить обратную отправку, URL-адрес меняется на этот:

http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike?lang=en&id=1239&title=Gary+Fisher+Hkek+Mountain+Bike

И когда URL переписывается, все параметры строки запроса удваиваются - поэтому, когда я хочу получить текущий язык, выполнив это:

Request.QueryString["lang"]

Значение, которое я получаю в ответ, - "en,ru".

У кого-нибудь еще есть такие проблемы?

Обновить:Перепишите правила из Web.Config

<rule name="RedirectProductPageUrls" stopProcessing="true">
    <match url="^product\.aspx$" />
    <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_METHOD}" negate="true" pattern="^POST$" />
        <add input="{QUERY_STRING}" pattern="^lang=([^=&amp;]+)&amp;id=([^=&amp;]+)&amp;title=([^=&amp;]+)$" />
    </conditions>
    <action type="Redirect" url="{C:1}/products/{C:2}/{C:3}" appendQueryString="false" redirectType="Permanent" />
</rule>
<rule name="RewriteProductPageUrls" stopProcessing="true">
    <match url="^([^/]+)/product/([^/]+)/([^/]+)/?$" />
    <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    </conditions>
    <action type="Rewrite" url="product.aspx?lang={R:1}&amp;id={R:2}&amp;title={R:3}" />
</rule>
Это было полезно?

Решение

Добавьте атрибут appendQueryString="false" также к элементу action правила перезаписи.

Надеюсь, это поможет.

Другие советы

Я смог решить проблему, добавив

Form.Action = Request.RawUrl;

к событию Page_Load.Я смог оставить appendQueryString="TRUE", и пока он работает должным образом.

Это функция безопасности модуля перезаписи IIS.

Лично я предпочитаю ISAPI Rewrite, поскольку он намного лучше, проще в написании правил и обладает большим количеством функций.

Также обнаружили, что при средней или высокой нагрузке (более 100 подключений к веб-сайту) модуль перезаписи IIS приводит к аварийному завершению работы пула приложений и появлению нового процесса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top