IIS 7.5与URL重写模块双打查询字符串PARAMS在回发(IIS 7.5 with URL R

2019-07-30 00:19发布

我使用的Windows 7 RC IIS 7.5。 我使用IIS URL重写模块来重写URL。

一切似乎都做工精细,直到我通过点击按钮执行回发。 然后,追加查询字符串PARAMS我重写URL,就像这样:

重写URL,因为它出现在浏览器中: HTTP://本地主机/ EN /产品/ 1239 /加里·费舍尔+ + + Hkek山地自行车+

如果没有URL重写的网址是:

HTTP://localhost/product.aspx LANG = EN&ID = 1239&标题=加里·费舍尔+ + + Hkek山地自行车+

当我点击一个按钮来执行回发的网址更改为:

HTTP://本地主机/ EN /产品/ 1239 /加里·费舍尔+ + + Hkek山地自行车+ LANG = EN&ID = 1239&标题=加里·费舍尔+ + + Hkek山地自行车+

而当URL重写,所有的查询字符串PARAMS增加一倍 - 所以,当我想这样做是为了获得当前的语言:

Request.QueryString["lang"]

我回来的值是“恩,恩”。

是其他任何人有这样的问题?

更新:从重写规则的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>

Answer 1:

在appendQueryString =“false”属性添加到重写规则的动作元素为好。

希望这可以帮助。



Answer 2:

我能够加入到解决问题

Form.Action = Request.RawUrl;

到Page_Load事件。 我能离开appendQueryString =“TRUE”,至今它是否工作正常。



Answer 3:

这是IIS重写模块的安全功能。

我个人更喜欢ISAPI重写,因为它是更好的,更简单的编写规则,并具有更多的功能。

也有在中度到高负荷(超过100连接到一个网站)发现IIS重写模块课程的应用程序池崩溃和重生和新工艺。



文章来源: IIS 7.5 with URL Rewrite Module Doubles QueryString Params on Postback