Domanda

Sto usando IIS 7.5 su Windows 7 RC. Io uso il modulo di riscrittura URL IIS per riscrivere gli URL.

Tutto sembra funzionare bene, fino a quando eseguo un postback facendo clic su un pulsante. E poi aggiunge i params queryString mio URL riscritto, in questo modo:

Riscritto URL, come appare nel browser: http: // localhost / it / prodotto / 1239 / Gary Fisher + + Hkek + + Mountain Bike

Senza riscrittura degli URL l'URL è:

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

Quando si fa clic su un pulsante per eseguire un postback, l'URL cambia a questo:

http: // localhost / it / prodotto / 1239 / Gary Fisher + + + Hkek Mountain Bike + lang = it & id = 1239 & title = Gary Fisher + + + Hkek Mountain Bike +

E quando l'URL viene riscritto, tutti i params queryString sono raddoppiati - così quando voglio ottenere la lingua corrente in questo modo:

Request.QueryString["lang"]

Il valore al mio ritorno è "en, en".

È qualcun altro avendo questi problemi?

UPDATE: riscrivere le regole da 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>
È stato utile?

Soluzione

Aggiungere l'appendQueryString = attributo "falso" per l'elemento di azione della regola di riscrittura pure.

Spero che questo aiuti.

Altri suggerimenti

Sono stato in grado di risolvere il problema aggiungendo

Form.Action = Request.RawUrl;

per l'evento Page Load. Sono stato in grado di lasciare appendQueryString = "TRUE" e finora sta funzionando correttamente.

Questa è una caratteristica di sicurezza della Rewrite Module di IIS.

Io personalmente preferisco ISAPI Rewrite in quanto è molto meglio, più semplice di scrivere le regole, e ha più funzioni.

hanno anche trovato in moderato ad alto carico (oltre 100 connessioni a un sito web) che il Rewrite Module di IIS corsi il pool di applicazioni di crash e deporre le uova e nuovo processo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top