我在Windows 7 RC上使用IIS 7.5。我使用IIS Url Rewrite模块重写URL。
一切似乎工作正常,直到我点击一个按钮执行回发。然后它将查询字符串params附加到我重写的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会更改为:
当重写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>
答案 0 :(得分:12)
我能够通过添加
解决问题Form.Action = Request.RawUrl;
到Page_Load事件。我能够离开appendQueryString =“TRUE”,到目前为止它正常工作。
答案 1 :(得分:11)
将appendQueryString =“false”属性添加到重写规则的action元素中。
希望这有帮助。
答案 2 :(得分:0)
这是IIS重写模块的安全功能。
我个人更喜欢ISAPI Rewrite,因为它更好,编写规则更简单,并且具有更多功能。
还发现,在中等到高负载(超过100个网站连接)下,IIS重写模块会对应用程序池进行崩溃和生成以及新进程。