2016-03-27 16 views
0

コントローラの名前が変更され、新しいURLにHTTP 301を追加します。私はRouteConfigを汚染しないように私はIISからやっている方が好きです。また、リダイレクトに含まれるすべてのパラメータを含める必要があります。IIS 301コントローラ間のリダイレクト(パラメータを含む)ASP.NET MVC

私は、次のすべてを達成しようとしています:

  • site.com/old - >301 site.com/new
  • site.com/old/ - >301 site.com/new/
  • site.com/old?foo=bar - >301 site.com/new?foo=bar
  • などを

これは私がこれまでに持っているものです私はそれを働かせることができません:

<rule name="Redirect Old to New" pattern="ECMAScript" stopProcessing="true"> 
    <match url=".*\/old.*" /> 
    <action type="Redirect" redirectType="Permanent" url="/new/{R:0}" /> 
</rule> 

答えて

2

問題はあなたの正規表現にあるようです。このコンテキストのURLは/で始まらず、常に文字列^の先頭に一致する必要があります。また、リダイレクトURLの終わりを指定するためにキャプチャするものを定義する必要があります。

<rule name="301 Redirect Old to New"> 
    <!-- 
     matches   /old 
     matches   /old?foo=123 
     matches   /old/?foo=123 
     matches   /old/older/oldest?foo=123 
     doesn't match /oldee/whatever 
    --> 
    <match url="^old(?:/|(?=\?)|$)(.*)"/> 
    <action type="Redirect" redirectType="Permanent" url="new/{R:1}"/> 
</rule> 

また、SEOの目的で、私はあなたの2番目のオプションで足で自分自身を撮影していると言います。 常にのいずれかを末尾にスラッシュまたはを使用しないでください。リダイレクトに1つ使用してください。 1つを選択して一貫性があるので、すべてのリンク先URLが同じです。

301リダイレクト自体にIISを使用する場合は何も問題はありませんが、この方法をとると正規表現の作成に十分熟練しているはずです。正規表現テスターユーティリティを使用して、作成した内容が期待どおりに動作することを保証する場合にも役立ちます。

ここに正規表現を学ぶのに最適なチュートリアルがあります:http://www.regular-expressions.info/tutorial.html

+0

@globetrotterは - 私は再び正規表現を更新 - それは '/ old'以前に一致しませんでした。 – NightOwl888

+0

こんにちは、すばらしい答えをありがとう。すべての私のURLは末尾にスラッシュ(/ old /、/ new/etc)が付いています。私はそれをMVCで設定しました。どのように悪いSEOを避けるためにルールを変更する必要がありますか? – globetrotter

+0

私はそれを指定した方法は常に後続のスラッシュを追加するので、そのままあなたのために動作するはずです。スラッシュを使用しないようにするには、正規表現を '^ old(?= \ /)|(?= \?)| $)(/?.*)'に変更する必要があります。 redirect regexを 'new {R:1}'に設定します(おそらくあなたには役に立たないかもしれませんが、他の人は知りたいかもしれません)。 – NightOwl888

関連する問題