IIS 7.5 с модулем перезаписи URL-адреса удваивает параметры QueryString при обратной передаче - PullRequest
8 голосов
/ 10 июля 2009

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

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

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

Без перезаписи 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, en».

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

ОБНОВЛЕНИЕ: переписать правила из 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>

Ответы [ 3 ]

12 голосов
/ 31 августа 2010

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

Form.Action = Request.RawUrl;

к событию Page_Load. Мне удалось оставить appendQueryString = "TRUE", и пока он работает правильно.

11 голосов
/ 27 июля 2009

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

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

0 голосов
/ 17 августа 2009

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

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

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

...