2017-02-15 5 views
0

を付けずに取得.NET RewriteMap命令は、古いURLのために働くためには、新しいURLに古いURLをリダイレクトします。次のようにルールは現在、次のとおりです。私は(301)に私のweb.configファイル内RewriteMap命令を使用しているとか、スラッシュ

<rule name="Localhost Rewrite Rules" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions> 
     <add input="{HTTP_HOST}" pattern="^(.*\.)?example\.com$" /> 
     <add input="{lhRewrites:{REQUEST_URI}}" pattern="(.+)" /> 
     </conditions> 
     <action type="Redirect" appendQueryString="false" url="{C:1}" redirectType="Permanent" /> 
    </rule> 

を、これは各ドメイン名に特異的なルールの大きなセットの一部であるようなパターンintentiallyハードコード、ドメインに注意してください。だから私は一般的にルールを最適化したり書き直したりするつもりはない。

rewriteMap.configファイルには、次のリダイレクトが含まれています。私はhttp://example.com/oldを訪問したときに

<rewriteMap name="lhRewrites"> 
    <add key="/old" value="/new" /> 
</rewriteMap> 

現在、ルールが正常に動作します - それはhttp://example.com/newにリダイレクトします。 「古い」URLの末尾にスラッシュすなわちhttp://example.com/old/を含む場合

しかし、それは動作しません。古いURLに後続のスラッシュがあるかどうかに関係なく動作する必要があります。

私は、マッピングキーのすべてを複製する必要がないことを好むだろう。

多くのありがとうございます。

答えて

0

あなたが正規表現^(.*[^/])(\/?)$にスラッシュを付けずにURLと一致して、書き換えマップにこのマッチしたURLを渡します場合は、それを達成することができます。あなたのルールは、そのようにする必要があります:

<rule name="Localhost Rewrite Rules" stopProcessing="true"> 
    <match url="^(.*[^/])(\/?)$" /> 
    <conditions> 
    <add input="{HTTP_HOST}" pattern="^(.*\.)?example\.com$" /> 
    <add input="{lhRewrites:/{R:1}}" pattern="(.+)" /> 
    </conditions> 
    <action type="Redirect" appendQueryString="false" url="{C:1}" redirectType="Permanent" /> 
</rule> 
関連する問題