2011-02-04 13 views
0

URL書き換えルールが正しく機能するようになっています。IISのURL書き換えルール(パラメータあり)

私はこのURLをしたい:に書き直すこと

http://www.mysite.com/oldpage.aspx?oldid=123

:ここ

http://www.mysite.com/sub/newpage.aspx?newid=123

は私が持っているものですが、それは働いていない:

<rule name="Old2New" stopProcessing="true"> 
    <match url="^oldpage.aspx?oldid=([0-9]+)" /> 
    <action type="Rewrite" 
      url="/sub/newpage.aspx?newid={R:1}" 
      appendQueryString="true" /> 
</rule> 

何私は行方不明ですか?

+0

使用しているASP.NETのバージョンは何ですか? .NET 4から以前のバージョン(以前のバージョンでは、URL書き換えが率直に)に大きな違いがあります。 – pearcewg

+0

@pearcewg - 実際、UrlRewriteはIISの機能/拡張であり、実際に実行しているASP.NETのバージョンとはまったく関係ありません。 ISAPI_RewriteやIconic Rewriterなどの適切なISAPIベースのリライタがない場合は、IIS6(ワイルドカードマッピング、httpmodulesなど)で行う必要があるさまざまなボジジでこれを誤解していると思います。 – Kev

+1

私は問題を疑問符に絞り込んだ。 matchURLを "^ oldpage.aspx \?oldid =([0-9] +)"に変更してエスケープすると、テスト一致が機能しているように見えますが、IIS経由のリクエストは書き換えられません。 –

答えて

1

正規表現のインデックスは0から始まりません。1.ので、あなたのルールは次のようになります。

<rule name="Old2New" stopProcessing="true"> 
    <match url="^oldpage.aspx?oldid=([0-9]+)" /> 
    <action type="Rewrite" 
      url="/sub/newpage.aspx?newid={R:0}" 
      appendQueryString="true" /> 
</rule> 

あなたは簡単にIIS7インターフェイスであなたのルールをテストすることができます。

+0

実際に{R:0}は "oldpage.aspx?oldid = 123"を返し、{R:1}は123を返します。疑問符に関連する問題のようです。 –

0

クエリ文字列の一部{C:1}キャッチする条件を使用して、このような:

<rule name="My rule" stopProcessing="true"> 
    <match url="^oldpage\.aspx" ignoreCase="true" /> 
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
     <add input="{QUERY_STRING}" pattern="oldid=([0-9]+)" /> 
    </conditions> 
    <action type="Redirect" url="/sub/newpage.aspx?newid={C:1}" appendQueryString="false" /> 
</rule> 

をテストし、作業を。

関連する問題