2009-07-10 6 views
8

J'utilise IIS 7.5 sur Windows 7 RC. J'utilise le module IIS Url Rewrite pour réécrire les URL.IIS 7.5 avec le module de réécriture d'URL Double QueryString Params sur Postback

Tout semble fonctionner correctement, jusqu'à ce que j'effectue une publication en cliquant sur un bouton. Il ajoute ensuite les querystring params à mon URL réécrite, comme ceci:

URL réécrite, tel qu'il apparaît dans le navigateur: http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike

Sans URL réécrire l'URL est:

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

Lorsque je clique sur un bouton pour effectuer une publication, l'URL change en:

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

Et lorsque l'URL est réécrite, tous les params queryString sont doublés - quand je veux la langue actuelle en faisant ceci:

Request.QueryString["lang"] 

La valeur mon retour est « en, en ».

Est-ce que quelqu'un d'autre a ces problèmes?

MISE À JOUR: Réécrire les règles 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

Pouvez-vous publier votre règle de réécriture? Il suffit de publier ce qui se trouve dans le fichier web.config: ... –

+0

Mise à jour avec une règle de réécriture et une règle de redirection pour les pages de produit. – MartinHN

Répondre

8

Ajoutez l'attribut appendQueryString = "false" à l'élément d'action de la règle de réécriture ainsi.

Espérons que cela aide.

+0

Fonctionne comme un charme! Maintenant, je suis prêt pour Windows 7 RTM. – MartinHN

0

Ceci est une fonctionnalité de sécurité du module de réécriture IIS.

Personnellement, je préfère ISAPI Rewrite car il est beaucoup mieux, plus simple d'écrire des règles, et a plus de fonctionnalités.

A également trouvé sous charge modérée à élevée (plus de 100 connexions à un site Web) que le module de réécriture IIS cours le pool d'applications pour planter et générer et nouveau processus.

+0

Bruce, j'ai juste laissé tomber la DLL UrlRewritting parce qu'elle m'a forcé à utiliser app_pool en mode classique. Je pensais que IIS 7 intégré serait mieux et plus optimisé. Suggérez-vous le contraire? S'il vous plaît faites le moi savoir .. Je suis inquiet. – aron

11

j'ai pu résoudre le problème en ajoutant

Form.Action = Request.RawUrl; 

à l'événement Page_Load. J'ai été en mesure de quitter appendQueryString = "TRUE" et jusqu'à présent, il fonctionne correctement.

+0

Hey Ryan, j'ai joué avec l'appendQueryString pendant une heure sans chance. Mais votre suggestion a fonctionné! merci – aron

+0

Oui, ce problème est effectivement résolu en modifiant l'action de formulaire. Vous pouvez créer un adaptateur de contrôle personnalisé afin que la modification s'applique à tous les formulaires du site. Scott Gu a un guide au bas de ce post: [link] (http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-réécriture-avec-asp-net.aspx) – Corgalore

Questions connexes