web-dev-qa-db-ja.com

IIS URL Rewrite:.htmlと.aspxを除き、末尾にスラッシュを追加します

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>
19
Seb Nilsson

あなたが何かを正しく行うことを望むなら、あなたはそれを自分でしなければなりません、明らかに...

これが私の質問の解決策です:

<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>

更新これについて詳しくブログで説明しました

24
Seb Nilsson

他の答えを変えて、これを使用したので、ファイル拡張子のリストを指定する必要はありません。

<!-- 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> 
13
Giscard Biamby

次のような複数の拡張機能を追加します。

<add input="{URL}" negate="true" pattern="((.+).(jpg|ico|gif|js|png|htm|css|html))" ignoreCase="true" />
3
Denis

すべてのファイルにスラッシュが追加されないようにするために、一致ルールを次のように変更しました。

<match url="^([^.]*[^/])$" />

これは、スラッシュで終わらない任意の数の非ドット文字を含むパスにのみルールを適用します。したがって、ドットを含むパス(xxx.html、xxx.aspxなど)は、追加の否定規則を必要とせずに除外されます。

一致ルールにドットが含まれていることを確認することで、一致タイプのIsFileおよびIsDirectoryを使用する条件ルールを完全に削除できました。これらの一致タイプは、分散ルール(web.config)でのみ許可され、グローバルルール(applicationHost.config)では許可されないため、グローバルルールを使用してすべてのサイトに適用するのではなく、すべてのサイトでこのルールを複製する必要がありました。一致ルールの正規表現を変更してファイルを除外し、IsFileおよびIsDirectory条件を削除することで、複数の分散ルールを作成する代わりに、グローバルルールを作成できました。

1
Garland Pope

POST、DELETE、およびその他のRESTメソッド呼び出しが末尾のスラッシュなしで誤ってリダイレクトを介してGETリクエストになることを防ぐには、次の条件を追加することを検討してください。

<add input="{REQUEST_METHOD}" matchType="Pattern" pattern="GET" ignoreCase="true" />
0
Johan B

これはほとんど私にとってはうまくいきました。に変更する必要がありました

<add input="{URL}" pattern="(.*?)\.html$" negate="true" />
<add input="{URL}" pattern="(.*?)\.aspx$" negate="true" />

それ以外の場合はこれをありがとう!

0
Colin Wiseman

あなたはこれを試すことができます:

        <conditions>
            <add input="{URL}" pattern="(.*)\.(.*)$" negate="true" />
        </conditions>
0
MyPhuong Tran