2009-07-10 10 views
8

Używam IIS 7.5 na Windows 7 RC. Używam modułu IIS Urr Rewrite do przepisywania adresów URL.IIS 7.5 z modułem URL Rewrite Podwaja parametry QueryString na poczcie zwrotnej

Wszystko wydaje się działać poprawnie, dopóki nie wykonuję odświeżenia, klikając przycisk. Następnie dołącza params ciągu kwerendy do mojego przepisany URL, na przykład:

przepisany URL, gdyż pojawia się w przeglądarce: http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike

Bez URL przepisywania URL to

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

Po kliknięciu przycisku w celu odświeżenia strony URL zmienia się na:

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

A gdy adres URL jest przepisany wszystkie params kwerendy są podwojone - więc gdy chcę uzyskać aktualny język w ten sposób:

Request.QueryString["lang"] 

Wartość wrócę to „en, en”.

Czy ktoś jeszcze ma te problemy?

UPDATE: Przepisz reguły z 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> 
+0

Czy możesz opublikować swoją zasadę przepisywania? Po prostu publikuj wszystko, co jest w sieci.config: ... –

+0

Zaktualizowana regułą przepisywania i regułą przekierowania stron produktów. – MartinHN

Odpowiedz

8

Dodaj appendQueryString = "false" atrybut do elementu działanie reguły przepisywania również.

Mam nadzieję, że to pomoże.

+0

Działa jak urok! Teraz jestem gotowy na system Windows 7 RTM. – MartinHN

0

Jest to funkcja zabezpieczająca modułu IIS Rewrite.

Osobiście preferuję Przepisywanie ISAPI, ponieważ jest o wiele lepiej, łatwiej jest pisać reguły i ma więcej funkcji.

Znalazłem również pod obciążeniem od średniego do wysokiego (ponad 100 połączeń ze stroną internetową), że moduł IIS Rewrite kieruje pulę aplikacji do awarii i odradzania się oraz do nowego procesu.

+0

Bruce, właśnie upuściłem dll UrlRewritting, ponieważ zmusiło mnie to do użycia app_pool w trybie klasycznym. Pomyślałem, że wbudowane w IIS 7 będą lepsze i bardziej zoptymalizowane. Sugerujesz inaczej? proszę dać mi znać .. Martwię się. – aron

11

udało mi się rozwiązać ten problem przez dodanie

Form.Action = Request.RawUrl; 

Do zdarzenia Page_Load. Udało mi się opuścić appendQueryString = "TRUE" i jak na razie działa poprawnie.

+0

Hej Ryan, przez godzinę błąkałam się z appendQueryString bez powodzenia. Ale twoja sugestia zadziałała! dzięki – aron

+0

Tak, problem ten został faktycznie rozwiązany poprzez modyfikację działania formularza. Możesz utworzyć niestandardowy adapter sterowania, aby zmiana dotyczyła wszystkich formularzy w witrynie. Scott Gu ma poradnik na dole tego wpisu: [link] (http: //weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-urr-przepisywanie-with-asp-net.aspx) – Corgalore

Powiązane problemy