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

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

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

Переписать URL, как это выглядит в браузере: HTTP: // локальный / EN / продукт / 1239 / Gary Fisher + + Hkek + Горный велосипед +

Без перезаписи URL адрес:

Http: //localhost/product.aspx языки = еп & амп; ID = 1239 & амп; название = Gary Fisher + + Hkek + Горный велосипед +?

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

HTTP: // локальный / ен / продукта / 1239 / Gary Fisher + + Hkek + Mountain Bike + Ланг = еп & амп; ID = 1239 & амп; название = Gary Fisher + + Hkek + Горный велосипед +

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

Request.QueryString["lang"]

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

Кто-нибудь еще имеет эти проблемы?

UPDATE: Rewrite rules from 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>
 MartinHN24 июл. 2009 г., 12:53
Обновлено с правилом перезаписи и правилом перенаправления для страниц продукта.
 Jon Galloway21 июл. 2009 г., 22:10
Можете ли вы опубликовать свое правило переписывания? Просто опубликуйте все, что есть в web.config: & lt; rules & gt; & lt; rule name = & quot; foo & quot; & gt; ...

Ответы на вопрос(3)

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

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

 27 мая 2011 г., 04:43
Брюс, я просто удалил UrlRewritting Dll, потому что он заставил меня использовать app_pool в классическом режиме. Я полагал, что встроенный IIS 7 был бы лучше и более оптимизирован. Вы предлагаете иначе? пожалуйста, дайте мне знать. Я волнуюсь.
Решение Вопроса

false & quot; Атрибут элемента действия правила перезаписи также.

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

 MartinHN27 июл. 2009 г., 21:55
Работает как шарм! Теперь я готов к Windows 7 RTM.

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

Form.Action = Request.RawUrl;

на событие Page_Load. Мне удалось оставить appendQueryString = & quot; TRUE & quot; и до сих пор он работает правильно.

 23 сент. 2011 г., 21:07
Да, эта проблема на самом деле решается путем изменения формы действия. Вы можете создать собственный адаптер управления, чтобы изменение распространялось на все формы на сайте. Скотт Гу имеет руководство в нижней части этого поста:link
 27 мая 2011 г., 04:42
Эй, Райан, я безуспешно возился с appendQueryString в течение часа. Но ваше предложение сработало! Спасибо

Ваш ответ на вопрос