IIS URL Rewrite Moduleを介してすべてのURLに末尾のスラッシュを追加することは広く普及していますが、どうすればよいですか。htmlおよび.aspxで終わるURLの例外を追加する?
今日私はこれを持っています:
<rule name="Add trailing slash" stopProcessing="true">
<match url="(.*[^/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<!-- Doesn't seem to be working -->
<!--<add input="{REQUEST_URI}" pattern="(.*?).html$" negate="true" />-->
<!--<add input="{REQUEST_URI}" pattern="(.*?).aspx$" negate="true" />-->
</conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>
あなたが何かを正しく行うことを望むなら、あなたはそれを自分でしなければなりません、明らかに...
これが私の質問の解決策です:
<rule name="Add trailing slash" stopProcessing="true">
<match url="(.*[^/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="(.*?)\.html$" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="(.*?)\.aspx$" negate="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>
更新: これについて詳しくブログで説明しました 。
他の答えを変えて、これを使用したので、ファイル拡張子のリストを指定する必要はありません。
<!-- Ensure trailing slash -->
<rule name="Add trailing slash" stopProcessing="true">
<match url="(.*[^/])$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" pattern="(.*?)\.[a-zA-Z]{1,4}$" negate="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>
次のような複数の拡張機能を追加します。
<add input="{URL}" negate="true" pattern="((.+).(jpg|ico|gif|js|png|htm|css|html))" ignoreCase="true" />
すべてのファイルにスラッシュが追加されないようにするために、一致ルールを次のように変更しました。
<match url="^([^.]*[^/])$" />
これは、スラッシュで終わらない任意の数の非ドット文字を含むパスにのみルールを適用します。したがって、ドットを含むパス(xxx.html、xxx.aspxなど)は、追加の否定規則を必要とせずに除外されます。
一致ルールにドットが含まれていることを確認することで、一致タイプのIsFileおよびIsDirectoryを使用する条件ルールを完全に削除できました。これらの一致タイプは、分散ルール(web.config)でのみ許可され、グローバルルール(applicationHost.config)では許可されないため、グローバルルールを使用してすべてのサイトに適用するのではなく、すべてのサイトでこのルールを複製する必要がありました。一致ルールの正規表現を変更してファイルを除外し、IsFileおよびIsDirectory条件を削除することで、複数の分散ルールを作成する代わりに、グローバルルールを作成できました。
POST、DELETE、およびその他のRESTメソッド呼び出しが末尾のスラッシュなしで誤ってリダイレクトを介してGETリクエストになることを防ぐには、次の条件を追加することを検討してください。
<add input="{REQUEST_METHOD}" matchType="Pattern" pattern="GET" ignoreCase="true" />
これはほとんど私にとってはうまくいきました。に変更する必要がありました
<add input="{URL}" pattern="(.*?)\.html$" negate="true" />
<add input="{URL}" pattern="(.*?)\.aspx$" negate="true" />
それ以外の場合はこれをありがとう!
あなたはこれを試すことができます:
<conditions>
<add input="{URL}" pattern="(.*)\.(.*)$" negate="true" />
</conditions>