2

関連 1 2 3

しかし、この質問は少し異なります。

次のような RewriteRule があるとします。

RewriteRule ^test/([\w]*)/([\w]*)/([\w]*)/?$ go.php?q=THREE_$1_$2_$3

したがって、http://localhost/test/a/b/cはhttp://localhost/go.php?q=THREE_a_b_cに書き換えられます。

ここで、 http://localhost/test/a//c のように、中央のパラメーターが省略され、結果が二重スラッシュになる条件を明示的にキャッチしたいとします。

だから私は次のようなルールを書きます:

RewriteRule ^test/([\w]*)//([\w]*)/?$ go.php?q=TWO_$1_(EMPTY)_$2

しかし残念ながら、ルールは決して一致しません。二重スラッシュと の両方で保持されていても、RewriteRuleは二重スラッシュを認識しないようです。%{THE_REQUEST}%{REQUEST_URI}

だから私は次のようなルールを書きます:

RewriteCond %{REQUEST_URI} //
RewriteRule ^test/([\w]*)/([\w]*)/?$ go.php?q=TWO_$1_(NONE)_$2

RewriteCondは REQUEST_URI に二重スラッシュがある場合にのみ適用されるため、これは機能しますしかし、ご覧のとおり、正規表現で解析するときに二重スラッシュがないと想定する必要があります。

RewriteRule が %{REQUEST_URI} で機能すると思っていたので、これはすべて非常に気がかりです

私の質問は、生の %{REQUEST_URI} ではない場合、RewriteRule は何をフィードするのでしょうか?

4

1 に答える 1

0

これについてはわかりませんが、2番目のルール:

RewriteRule ^test/([\w]*)//([\w]*)/([\w]*)/?$ go.php?q=TWO_$1_(EMPTY)_$2

次のような URL を照合しようとしているようです。

http://localhost/test/a//b/c

またはこのように:

http://localhost/test/a///c

2 番目のルールを次のように変更した場合:

RewriteRule ^test/([\w]*)//([\w]*)/?$ go.php?q=TWO_$1_(EMPTY)_$2

それはうまくいくはずです。

編集:

本当の答え

Apache は空のパス セグメントを削除します

これで、問題が単なる正規表現の誤りではないことがわかりました。答えを探しました。

于 2010-12-23T22:00:37.653 に答える