mysite.com/blaへのリクエストをmysite.com/bla/に変換するために、IIS URL Rewrite モジュールを取得して、URL の末尾にスラッシュを適用しようとしています。
以下に示すルールを使用しています。これは、IIS URL Rewrite ウィザードがまさにこの状況のために設定したルールであり、ファイルが存在する場合にのみ、すべてが正常に機能します。404 の状況になるとすぐに、リクエストの最後にスラッシュが追加されます。
<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" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="{R:1}/" />
</rule>
上記のルールを使用すると、次のことが起こります。
- www.mysite.com/bla - www.mysite.com/bla/ にリダイレクトします (私が望むもの)
- www.mysite.com/bla/ - そのまま (私が欲しいものだけ)
- www.mysite.com/bla/myimg.jpg - 提供されたままになります myimg.jpg が存在します
- www.mysite.com/bla/myimg.jpg - myimg.jpgが存在しない場合、www.mysite.com/bla/myimg.jpg/ にリダイレクトします
まず、なぜこれが起こっているのか、どうすれば防ぐことができるのでしょうか。リソースが 404 の場合、単純に 404 にしたいだけです。または、ディレクトリの要求が末尾のスラッシュなしで行われた場合は、追加したいだけです。
次に、ファイルではない場合とディレクトリでない場合の両方のルールがあるのはなぜですか? 確かに、それがファイルではなく、ディレクトリである場合は言うべきです (または、何か誤解していますか?)。
どんな助けでも大歓迎です。