IIS 7.0のMod Rewriteでクエリにサブフォルダーをリダイレクトする方法は?
質問
iis.netからIIS 7.0のMod Rewriteを使用していて、リクエストをリダイレクトしたい:
- http://example.com/users/ foo から http://example.com/User.aspx ?< strong> name = foo
- http://example.com/users/ 1 から http://example.com/User.aspx ?< strong> id = 1
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番目の質問については、完全に理解できるかどうかわかりません。フォルダー名とユーザー名の違いをどのように見分けることができますか?フォルダーには常に末尾にスラッシュが付きますか?