IIS 7.5 con módulo de reescritura de URL duplica los parámetros de QueryString en la devolución de datos

StackOverflow https://stackoverflow.com/questions/1108473

  •  12-09-2019
  •  | 
  •  

Pregunta

Estoy usando IIS 7.5 en Windows 7 RC.Utilizo el módulo IIS Url Rewrite para reescribir URL.

Todo parece funcionar bien, hasta que realizo una devolución de datos haciendo clic en un botón.Luego agrega los parámetros de la cadena de consulta a mi URL reescrita, así:

URL reescrita, tal como aparece en el navegador:http://localhost/en/product/1239/Gary+Fisher+Hkek+Bicicleta+de+montaña

Sin reescribir la URL, la URL es:

http://localhost/product.aspx?lang=en&id=1239&title=Gary+Fisher+Hkek+Bicicleta+de montaña

Cuando hago clic en un botón para realizar una devolución de datos, la URL cambia a esto:

http://localhost/en/product/1239/Gary+Fisher+Hkek+bicicleta+de+montaña?lang=en&id=1239&title=Gary+Fisher+Hkek+bicicleta+de+montaña

Y cuando se reescribe la URL, todos los parámetros de la cadena de consulta se duplican, así que cuando quiero obtener el idioma actual haciendo esto:

Request.QueryString["lang"]

El valor que obtengo es "en,en".

¿Alguien más tiene esos problemas?

ACTUALIZAR:Reescribir reglas desde 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>
¿Fue útil?

Solución

Agregue el atributo = appendQueryString "falsa" para el elemento de acción de la regla de reescritura también.

Espero que esto ayude.

Otros consejos

yo era capaz de resolver el problema agregando

Form.Action = Request.RawUrl;

para el evento Load. Yo era capaz de salir de appendQueryString = "true" y hasta ahora está funcionando correctamente.

Esta es una característica de seguridad del módulo de reescritura de IIS.

Yo personalmente prefiero reescritura de ISAPI ya que es mucho mejor, más fácil de escribir reglas, y tiene más características.

También he encontrado debajo de moderada a alta carga (más de 100 conexiones a un sitio web) que los cursos de la reescritura del módulo de IIS el grupo de aplicaciones a Crash y desovar y el nuevo proceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top