IIS 7.0のMod Rewriteでクエリにサブフォルダーをリダイレクトする方法は?

StackOverflow https://stackoverflow.com/questions/632360

  •  08-07-2019
  •  | 
  •  

質問

iis.netからIIS 7.0のMod Rewriteを使用していて、リクエストをリダイレクトしたい:

2つのルールを作成しました:

<rule name="ID">
   <match url="/users/([0-9])" />
   <action type="Rewrite" url="/User.aspx?id={R:1}" />
</rule>
<rule name="Name">
   <match url="/users/([a-z])" ignoreCase="true" />
   <action type="Rewrite" url="/User.aspx?name={R:1}" />
</rule>

iis mmcテストダイアログにテストを渡しますが、デバッグには含まれません( http:// localhost:9080 / example.com / users / 1 または <!>#8230; / users / foo )本物のIIS!

間違ったことは何ですか?

役に立ちましたか?

解決

明らかな問題は、現在の正規表現がユーザー名または1つの数字の1文字にしか一致しないことです。複数の文字または数字と一致させるには、括弧内にプラス数量詞を追加する必要があります。正規表現の量指定子の詳細については、このページをご覧ください。 <!> quot; / users / <!> quot;のようなプレーンなURLには一致しないことに注意してください。 (IDまたは名前なし)。これが意図したものであることを確認してください。

他の問題は、IISが最初のスラッシュの後の最初の文字から書き換えルールを評価することです。したがって、/users/([0-9])に一致するルールは何にも一致しません。正規表現の評価が行われると、URLはusers/fooではなく/users/fooのように見えるためです。解決策は、スラッシュの代わりにパターンの先頭で^(<!> quot; start of string <!> quot;を意味する正規表現文字)を使用することです。このように:

<rule name="ID">
    <match url="^users/([0-9]+)" />
    <action type="Rewrite" url="/User.aspx?id={R:1}" />
</rule>
<rule name="Name">
    <match url="^users/([a-z]+)" ignoreCase="true" />
    <action type="Rewrite" url="/Users.aspx?name={R:1}" />
</rule>

これらのURLの一方にUsers.aspxを選択し、他方にUser.aspx(複数形なし)を選択していることに注意してください。これが意図したものであることを確認してください。

ところで、私がこれらのことを理解した方法は、 IIS Failed Request Tracing to rewrite rules to rewrite rules 。これにより、診断が非常に簡単になりました。テストリクエストを作成し、トレースを調べて、各書き換えルールが評価されている場所を見つけることができました(<!> quot; PATTERN_MATCH <!> quot;と呼ばれるトレースのセクションにあります。あなたのルール、私はこれを見ました:

  

-PATTERN_MATCH
  パターン/ users /([0-9] +?)
  InputURL users / 1
  falseを無効にする
  falseに一致

先頭のスラッシュがないことに注意してください。

他のヒント

最初の文字/数字だけでなく、完全なID /ユーザーに一致させるには、それぞれ<match url="/users/([0-9]+)" /><match url="/users/([a-z]+)" ignoreCase="true" />を使用する必要があります。しかし、なぜあなたの正規表現が1桁で失敗したのかはわかりません。したがって、別の問題もあるに違いありません。

2番目の質問については、完全に理解できるかどうかわかりません。フォルダー名とユーザー名の違いをどのように見分けることができますか?フォルダーには常に末尾にスラッシュが付きますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top