5

次のURLを使用する必要があります。

http://example.org/sessionstuff/kees/view.aspx?contentid=4&itemid=5

次のように書き直す必要があります。

http://example.org/sessionstuff/view.aspx?site=kees&contentid=4&itemid=5

基本的にはkees値を取り、それをsiteパラメータとして置きます。web.configのルールを使用するIISURLRewriteモジュールを使用しています。web.configに次のコードを追加しました。

<rule name="RedirectSite" stopProcessing="true">
    <match url="^(\D[^/]*)/(.*)$" />
    <action type="Rewrite" url="{R:2}?site={R:1}" />
</rule>

すべて正常に動作しますが、ポストバックを実行すると、siteパラメーターが2倍になります。.aspxページで次のコードを使用してこれをテストしました。

<h3>Querystring</h3>
<ul>
    <% foreach (string key in Request.QueryString.Keys)
        Response.Write(String.Format("<li><label>{0}:</label>{1}</li>", key, Request.QueryString[key])); %>
</ul>
<asp:Button runat="server" Text="Postback" />

初めて

Querystring
site: kees
contentid: 4
itemid: 5

2回目

Querystring
site: kees, kees <--- double
contentid: 4
itemid: 5

siteパラメータがそれ自体を複製するのを防ぐ方法は?各ポストバックは別の値を追加します。

注:他のクエリパラメータが存在する必要があるため、使用することappendQueryString="false"はできません。

4

1 に答える 1

2

URLにすでにパラメータが含まれている場合は、URLを書き換えないことでこれを解決できるようですsite=(クエリ文字列のどこにあるかに関係なく)。では、どうすればよいのでしょうか。

ここで9番をチェックしてください:http://ruslany.net/2009/04/10-url-rewriting-tips-and-tricks/

私は今これをテストする方法がありませんが、私はこのようなものがうまくいくはずだと思います:

<rule name="Query String Rewrite">
  <match url="^(\D[^/]*)/(.*)$" />
  <conditions>
    <add input="{QUERY_STRING}" pattern="^((?!site=).)*$" />
  </conditions>
  <action type="Rewrite" url="{R:2}?site={R:1}" />
</rule>

注:私はルールの書き換えが得意ではあり^((?!site=).)*$ませんが、この正規表現は、文字列が含まれていない場合に一致しsite=ます。これは、書き換えルールを機能させる場合であるため、条件として追加します。私はあなたがこれをより効率的に行うことができるかもしれないと思います。

ここで私がやろうとしていることは、次のように言うことです。ルールを書き直してみましょう。ただし、siteパラメーターがまだ含まれていない場合に限ります。

これで質問に答えられるといいのですが。

===

これはうまくいくようです:

<rule name="RedirectSite" stopProcessing="true">
    <match url="^(\D[^/]*)/(.*)$" />
    <conditions>
        <add input="{QUERY_STRING}" pattern="^((?!site=).)*$" />
    </conditions>
    <action type="Rewrite" url="{R:2}?site={R:1}" />
</rule>


<rule name="RedirectSite2" stopProcessing="true">
    <match url="^(\D[^/]*)/(.*)$" />
    <conditions>
        <add input="{QUERY_STRING}" pattern="site=" />
    </conditions>
    <action type="Rewrite" url="{R:2}"  />
</rule>
于 2012-08-21T11:19:11.093 に答える