2009-07-10 10 views
8

estoy usando IIS 7.5 en Windows 7 RC. Uso el módulo de reescritura de Url de IIS para reescribir las URL.IIS 7.5 con el módulo de reescritura de URL de dobles de cadena de consulta Parámetros de devolución de datos

Todo parece funcionar bien, hasta que me realizo una devolución de datos haciendo clic en un botón. A continuación, añade los parametros de cadena de consulta a mi URL reescrito, así:

URL reescrita, tal como aparece en el navegador: http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike

Sin reescritura de URL la URL es:

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

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+Mountain+Bike?lang=en&id=1239&title=Gary+Fisher+Hkek+Mountain+Bike

Y cuando se vuelve a escribir la URL, todos los parametros cadena de consulta se duplican - así que cuando quiero conseguir el idioma actual al hacer esto:

Request.QueryString["lang"] 

El valor que se obtiene es "es, en".

¿Hay alguien más que tenga esos problemas?

ACTUALIZACIÓN: las reglas de reescritura de 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

¿Puedes publicar tu regla de reescritura? Justo después de lo que sea que en el web.config: ... –

+0

Actualizado con una regla de reescritura, y una regla de redirección de las páginas de productos. – MartinHN

Respuesta

8

Añadir el atributo appendQueryString = "false" para el elemento de acción de la regla de reescritura también.

Espero que esto ayude.

+0

¡Funciona como un encanto! Ahora estoy listo para Windows 7 RTM. – MartinHN

0

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 han encontrado en moderada a alta carga (más de 100 conexiones a un sitio web) que los cursos de IIS reescritura del módulo de la piscina aplicación se bloquee y desovar y el nuevo proceso.

+0

Bruce, acabo de dejar el UrlRewritting Dll porque me obligaba a usar app_pool en modo clásico. Pensé que el built-in de IIS 7 sería mejor y más optimizado. ¿Estás sugiriendo lo contrario? por favor avíseme ... Estoy preocupado. – aron

11

que fue capaz de resolver el problema agregando

Form.Action = Request.RawUrl; 

al evento Load. Pude dejar appendQueryString = "TRUE" y hasta ahora está funcionando correctamente.

+0

Hola Ryan, jugueteé con el appendQueryString durante una hora sin suerte. ¡Pero tu sugerencia funcionó! gracias – aron

+0

Sí, ese problema se resuelve modificando la acción del formulario. Puede crear un adaptador de control personalizado para que el cambio se aplique a todos los formularios del sitio. Scott Gu tiene una guía en la parte inferior de esta publicación: [enlace] (http: //weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx) – Corgalore

Cuestiones relacionadas