0

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

私がやっている方法は、パスの先頭にアンダースコア (_) を追加すると、サブドメイン 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 拡張子を残したいです (2 番目のサブドメインで提案されているものを削除することは提案しないでください。ありがとう :)

<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 を削除します。_

助言がありますか?

4

1 に答える 1

1

私があなたの問題を理解しているなら、あなたはURL: "〜new-path / login.aspx"を持っていて、あなたは "〜new-path / login"にリダイレクトしたいですよね?
次に、正規表現は次のようになります。

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

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

また、テンプレート{R:1}には、最初のグループ(中かっこ)の値が含まれます: "〜new-path / login"

于 2012-01-16T17:25:03.580 に答える