iis.net フォーラムで仲間の開発者を助けようとした後、リダイレクトを行うためのより良い方法を探し始めました。そして、私はこの記事に行き着きました。
私はこれらのアイデアをたくさん取り入れて、独自のバージョンを実装し始めました。すべて問題なく動作しているように見えましたが、途中でぶつかりました。助けていただければ幸いです。
さて、私のルールの簡単な説明:
私の考えは、URL をテストすることです。何か問題が見つかった場合は、すぐにリダイレクトするのではなく、URL を書き直して続行します。任意の時点で URL を書き換える場合は、カスタム サーバー変数 "Redirect" を true に設定します。最後に、カスタム サーバー変数が true かどうかをテストし、ユーザーをリダイレクトします。
ポイントは、一連のリダイレクトではなく、301 リダイレクトを 1 つだけにすることです。
これらは私のルールです(壁でごめんなさい):
<rules>
<rule name="WhiteList - resources" stopProcessing="true">
<match url="^resources/" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="None" />
</rule>
<rule name="Redirect subdomains with www to non-www" stopProcessing="false">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern=".*localhost.*" negate="true" />
<add input="{HTTP_HOST}" pattern="^www\.(.*)\.([^\.]+)\.([^\.]+)$" />
</conditions>
<action type="Rewrite" url="http://{C:1}.{C:2}.{C:3}{HTTP_URL}" />
<serverVariables>
<set name="Redirect" value="true" />
</serverVariables>
</rule>
<rule name="Redirect top domains with non-www to www" stopProcessing="false">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern=".*localhost.*" negate="true" />
<add input="{HTTP_HOST}" pattern="^([^\.]+)\.([^\.]+)$" />
</conditions>
<action type="Rewrite" url="http://www.{HTTP_HOST}{HTTP_URL}" />
<serverVariables>
<set name="Redirect" value="true" />
</serverVariables>
</rule>
<rule name="SEO - Remove trailing slash" stopProcessing="false">
<match url="(.*)/$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="{R:1}" />
<serverVariables>
<set name="Redirect" value="true" />
</serverVariables>
</rule>
<rule name="SEO - ToLower" stopProcessing="false">
<match url="(.*)" ignoreCase="false" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{URL}" pattern="[A-Z]" ignoreCase="false" />
<add input="{URL}" pattern="^.*?\.(axd|css|js|jpg|jpeg|png|gif|ashx|asmx|svc).*?$" negate="true" />
<add input="{URL}" pattern="^.*/(webshop)/.*$" negate="true" />
</conditions>
<action type="Rewrite" url="{ToLower:{R:1}}" />
<serverVariables>
<set name="Redirect" value="true" />
</serverVariables>
</rule>
<rule name="SEO - remove default.aspx" stopProcessing="false">
<match url="(.*?)/?default\.aspx$" />
<action type="Rewrite" url="{R:1}" />
<serverVariables>
<set name="Redirect" value="true" />
</serverVariables>
</rule>
<rule name="SEO - Trim aspx" stopProcessing="false">
<match url="(.*)\.aspx$" />
<action type="Rewrite" url="{R:1}" />
<serverVariables>
<set name="Redirect" value="true" />
</serverVariables>
</rule>
<rule name="SEO - non-canonical redirect" stopProcessing="true">
<match url="^(.*)" />
<conditions>
<add input="{Redirect}" pattern="true" />
</conditions>
<action type="Redirect" url="{R:1}" />
<serverVariables>
<set name="Redirect" value="false" />
</serverVariables>
</rule>
</rules>
現在、そのほとんどは実際にはかなりうまく機能していますが、ネイキッド ドメインにはいくつか問題があるようです。
www を含むサブドメイン (www 以外にリダイレクトする必要があります) を使用すると、失敗したように見えます。面白いことに、サブページに移動すると、正常に動作します。
(私はここに来たばかりなので、これ以上の URL を投稿することはできません :( そして、これを始めた他の人たちにクレジットを与えたいと思いました。)
{HTTP_URL}
削除しても失敗しないため、サーバー変数まで追跡しました。ただし、もちろん、想定されていることも実行しません (常にネイキッド ドメインにリダイレクトします)。さまざまな変数を試してみました: {URL}
、{REQUEST_URI}
それらはすべて同じエラーで終わるようで、少し面倒です。
誰かがルールを改善する必要がある場合は、気軽に返信してください。私は彼らと協力するのが大好きで、ほぼ完璧なリダイレクトを行いたいので、どんな提案も大歓迎です.