2

だから私は現在書き換えルールに取り組んでおり、本質的に次のことをしたいと思っています:

\/([\w+-]+)\/([\w+-]+)\/([\w+-]+)\/([\w+-]+)\/([\w+-]+)...

ご覧のとおり、同じパターンを何度も一致させたいと思っています。これは、現在の目的に合わせて何度でも書き出すことができますが、それほどエレガントではありません。どのキャプチャも同じパターンなので、以下のように任意に書けるといいです。

(?:\/([\w+-]+))+

次に、理想的には、次のように書き換えを割り当てることができます。

$1.php?one=$2&two=$3...

これが可能かどうか知っている人はいますか?そうではないかもしれませんが、聞いて損はありません。

4

1 に答える 1

0

このアイデアは反復キャプチャ グループと呼ばれ、それは不可能です。次のように想像してみてください: のキャプチャされた文字が([\w+-]+)バッファに入れられ、2 番目の一致が最初の一致を単純に上書きします。

実用的な解決策は、全体をキャプチャして、php (または他のサーバーサイドスクリプト) で処理することです。

RewriteRule (.*) index.php?req=$1

次にPHPで:

list($_GET['one'], $_GET['two'], $_GET['three']) = explode('\', $_GET['req'])

あるいは...まあ、これは非常に非現実的ですが、再帰を使用して mod_rewrite で実行できます。すべての反復で最後のセグメントが認識され、それが query_string などに渡されます。本番環境では機能しません (Apache は正常に再帰制限が低い値に設定されています) が、mod_rewrite がチューリング完全であることを思い出させる良い例です。

于 2013-01-28T22:55:11.220 に答える