サブドメイン間でいくつかのページを分割しており、場合によっては、異なるサブドメインの異なるページに 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 を削除します。_
助言がありますか?