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

Я использую 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, 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>

person MartinHN    schedule 10.07.2009    source источник
comment
Вы можете опубликовать свое правило перезаписи? Просто опубликуйте все, что есть в web.config: ‹rules› ‹rule name = foo› ...   -  person Jon Galloway    schedule 22.07.2009
comment
Обновлено с помощью правила перезаписи и правила перенаправления для страниц продукта.   -  person MartinHN    schedule 24.07.2009


Ответы (3)


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

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

person György Balássy    schedule 27.07.2009

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

Form.Action = Request.RawUrl;

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

person Ryan Sorensen    schedule 30.08.2010
comment
Привет, Райан, я час безуспешно возился с appendQueryString. Но ваше предложение сработало! Благодарность - person aron; 27.05.2011
comment
Да, эта проблема действительно решается изменением действия формы. Вы можете создать настраиваемый адаптер элемента управления, чтобы изменения применялись ко всем формам на сайте. У Скотта Гу есть руководство внизу этого сообщения: ссылка - person Corgalore; 23.09.2011

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

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

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

person Community    schedule 16.08.2009
comment
Брюс, я просто отказался от UrlRewritting Dll, потому что это заставило меня использовать app_pool в классическом режиме. Я подумал, что встроенный IIS 7 будет лучше и оптимизирован. Вы предлагаете иное? пожалуйста, дайте мне знать .. Я волнуюсь. - person aron; 27.05.2011