2012-01-16 15 views
0

サブドメイン間でいくつかのページを分割し、場合によっては異なるサブドメイン上の異なるページにURL書き換えを行いたいと考えています。すべてがファイル内の最後の2つのルールを除いて、書き換えルールです。これらの最後の2つのルールは、固定されたパスをどのサブドメインにルーティングするかを決定します。IIS7.5 URL正規表現が一致しない場合に一致します

私はアンダースコア(_)とパスを付加し、私はチルダ(〜)でパスを付加した場合、それはサブドメインA.にとどまるならば、私はそれをやっている方法は、 B.

をサブドメインにリダイレクトされています

だから私はこのルールを持っている:

<rule name="Login rule" stopProcessing="false"> 
     <match url="(.*?)/?old-path/Login\.aspx$" /> 
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> 
      <add input="{HTTP_METHOD}" pattern="GET" /> 
     </conditions> 
     <action type="Rewrite" url="~new-path/login.aspx" /> 
    </rule> 

URLの末尾にASPXがあります注意してください。それは処理を続けますが、リダイレクト先のリストの最後には一般的な書き換えルールがあります。これは、サブドメインA(WWW)上のすべてのASPXの拡張子を削除することですが、私は(第二サブドメイン上の提案を取り除く示唆しないでくださいサブドメインBのためのASPXの拡張子を残したい。感謝:)

<rule name="Remove ASPX" stopProcessing="false"> 
     <match url="^([^www\.]+)\.aspx$" /> 
     <conditions> 
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> 
     </conditions> 
     <action type="Rewrite" url="_{R:1}" /> 
    </rule> 

問題は、すべてのURLが最初にwwwを持つため、これは機能しません。正規表現ではそれほど良いことではありませんが、このルールをチルダが付いているすべてのURLに適用する必要があると思います。私はこれを試してみましたが、それはどちらかの作業は本当にありません:私はの開始時に_を置いた場合

<match url="^_+\.aspx$" /> 

は基本的に私は、このルールは、私は彼らに~を持つように書き換えられたURLを無視するが、ASPXを削除したいですパス。

提案がありますか?

答えて

1

あなたの問題が分かっていれば、 "〜new-path/login.aspx"というURLがあり、 "〜new-path/login"にリダイレクトしたいですか?
次に、あなたの正規表現は次のようにする必要があります:

^(.*~.*)\.aspx$ 

注:「WWW」はマッチングに含まれるドメイン名の一部とではありません。
あなたの完全なURLが "http://www.mysite.com/~new-path/login.aspx"の場合、 "〜new-path/login.aspx"部分だけが正規表現マッチングに参加します。

とテンプレート{R:1}:「〜新・パス/ログイン」

+0

それは実際に私がリダイレクトする '_'た最初のグループ(中括弧)で値が含まれます。しかし、私はあなたの提案を '^(。* _。*)\。aspx $'に変更しました。そして、テストのURLが一致しました!ありがとう。 – Nathan

関連する問題