URL 書き換えモジュールを備えた IIS 7.5 では、ポストバック時の QueryString パラメータが 2 倍になります

StackOverflow https://stackoverflow.com/questions/1108473

  •  12-09-2019
  •  | 
  •  

質問

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=ゲイリー+フィッシャー+ケク+マウンテン+バイク

ボタンをクリックしてポストバックを実行すると、URL が次のように変わります。

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

そして、URL が書き換えられると、すべてのクエリ文字列パラメータが 2 倍になります。したがって、これを実行して現在の言語を取得したいときは、次のようになります。

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=([^=&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>
役に立ちましたか?

解決

appendQueryString="false" 属性を書き換えルールの action 要素にも追加します。

お役に立てれば。

他のヒント

追加することで問題を解決できました

Form.Action = Request.RawUrl;

Page_Load イベントに送信します。appendQueryString="TRUE" のままにすることができ、今のところ正常に動作しています。

これは、IIS 書き換えモジュールのセキュリティ機能です。

私は個人的には ISAPI Rewrite の方が優れており、ルールの作成が簡単で、より多くの機能を備えているため好みます。

また、中程度から高負荷 (Web サイトへの接続が 100 以上) では、IIS 書き換えモジュールによってアプリケーション プールがクラッシュし、新しいプロセスが生成されることがわかりました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top