1

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 にしたいだけです。または、ディレクトリの要求が末尾のスラッシュなしで行われた場合は、追加したいだけです。

次に、ファイルではない場合とディレクトリでない場合の両方のルールがあるのはなぜですか? 確かに、それがファイルではなく、ディレクトリである場合は言うべきです (または、何か誤解していますか?)。

どんな助けでも大歓迎です。

4

1 に答える 1

0

まず、なぜこれが起こっているのか、どうすれば防ぐことができるのでしょうか。

これは、要求されたパスが既存のファイルまたはフォルダーである場合、ルールがトリガーされないという条件で発生するためです。

<conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>

したがって、存在しないファイルを要求すると、ルールがトリガーされます。

リソースが 404 の場合、単純に 404 にしたいだけです。

書き換えモジュールは、最初にパスをリダイレクトしようとします。これは、ファイルまたはフォルダーを要求する要求を考慮せず、ルートに到達しようとするためです。ルートが存在しないため、最終的に 404 が返されます。

次に、ファイルではない場合とディレクトリではない場合の両方のルールがあるのはなぜですか?

をリクエストした場合、ルートとして扱わずwww.mysite.com/bla/myimg.jpgに表示したいからです。ディレクトリについても同様です。bla/myimg.jpgbla/myimg.jpg

于 2013-09-06T19:12:11.633 に答える