带有 URL 重写模块的 IIS 7.5 在回发时将 QueryString 参数加倍
Posted
技术标签:
【中文标题】带有 URL 重写模块的 IIS 7.5 在回发时将 QueryString 参数加倍【英文标题】:IIS 7.5 with URL Rewrite Module Doubles QueryString Params on Postback 【发布时间】:2010-11-09 15:47:00 【问题描述】:我在 Windows 7 RC 上使用 IIS 7.5。我使用 IIS Url Rewrite 模块来重写 URL。
一切似乎都很好,直到我通过单击按钮执行回发。然后它将查询字符串参数附加到我重写的 URL 中,如下所示:
重写的 URL,就像它在浏览器中显示的那样: http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike
没有 URL 重写的 URL 是:
http://localhost/product.aspx?lang=en&id=1239&title=Gary+Fisher+Hkek+Mountain+Bike
当我单击按钮执行回发时,URL 变为:
http://localhost/en/product/1239/Gary+Fisher+Hkek+Mountain+Bike?lang=en&id=1239&title=Gary+Fisher+Hkek+Mountain+Bike
当 URL 被重写时,所有查询字符串参数都加倍 - 所以当我想通过这样做来获取当前语言时:
Request.QueryString["lang"]
我得到的值是“en,en”。
还有其他人有这些问题吗?
更新:从 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>
【问题讨论】:
你能发布你的重写规则吗?只需发布 web.config 中的任何内容:我可以通过添加来解决问题
Form.Action = Request.RawUrl;
到 Page_Load 事件。我能够离开 appendQueryString="TRUE" 并且到目前为止它工作正常。
【讨论】:
嘿,Ryan,我在 appendQueryString 上摆弄了一个小时,但没有成功。但是你的建议奏效了!谢谢 是的,这个问题其实是通过修改表单动作来解决的。您可以创建自定义控件适配器,以便将更改应用于站点中的所有表单。 Scott Gu 在这篇文章的底部有一个指南:link【参考方案2】:将 appendQueryString="false" 属性也添加到重写规则的 action 元素中。
希望这会有所帮助。
【讨论】:
【参考方案3】:这是 IIS 重写模块的一项安全功能。
我个人更喜欢 ISAPI Rewrite,因为它更好,编写规则更简单,功能更多。
还发现在中高负载(超过 100 个网站连接)下,IIS 重写模块会处理应用程序池崩溃和生成新进程。
【讨论】:
Bruce,我刚刚放弃了 UrlRewritting Dll,因为它迫使我在经典模式下使用 app_pool。我认为 IIS 7 的内置会更好,更优化。您是否建议其他方式?请让我知道..我很担心。以上是关于带有 URL 重写模块的 IIS 7.5 在回发时将 QueryString 参数加倍的主要内容,如果未能解决你的问题,请参考以下文章