IIS 7.5 con módulo de reescritura de URL duplica los parámetros de QueryString en la devolución de datos
-
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:
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=([^=&]+)&id=([^=&]+)&title=([^=&]+)$" />
</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}&id={R:2}&title={R:3}" />
</rule>
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.