1

全て、

RewriteRulesの1つで興味深い小さな癖に出くわしました。これは、名前付きバック参照を使用して解決したいと考えていました。しかし、私が見ることができることから、これはApacheのmod_rewriteでは不可能です。

2つの着信URLがあり、それぞれにキー変数が含まれています。これらは、同じ基になるフレームワークアクションに書き換える必要があります。

受信URL:

/users/list/page-2
/users/list/2

必要な書き換えエンドポイント

/?module = users&action = list&pagenum = 2

私はこのようなことをしたかったでしょう

RewriteRule ^ /(?P <module>([\ w] +))/(?P <action>([\ w] +))/(page-)?(?P <pagenum>([\ d] + ))$ /?module = $ {module}&action = $ {action}&pagenum = $ {pagenum} [L、QSA]

ただし、Apacheはそのようにプレイすることをまったく望んでおらず、名前付きの後方参照の場所にnull値を与えてくれます。問題を回避するために、キャプチャされたグループ($ 1、$ 2、$ 4)への数値参照を使用しました(ただし、N = 9のapache制限のほぼ半分です)。だから、これは私にとってショーストッパーではありません。

名前付き後方参照がApacheのmod_rewriteで使用できるかどうか、また使用できる場合、RewriteRuleのパターンが一致しないのはなぜですか?

ありがとう、イアン

4

3 に答える 3

1

これは役に立つかもしれません:

https://httpd.apache.org/docs/trunk/rewrite/rewritemap.html

于 2010-10-27T00:32:42.677 に答える
0

@superspaceの最新の回答が機能しない場合、私が提案するのは、ファイル/ディレクトリを転送しないすべてのリンクをルーティングし、それらをインデックスページにルーティングすることです。次に、ページ名を受け取り、手動で照合するルーティングクラスを設定します。これにより、名前付きのキャプチャ正規表現配列を使用して、フィードするテンプレートまたはページを一覧表示できます。

この方法をとる必要がある場合は、私に知らせてください。クラスからいくつかのコードを提供できます。

于 2010-10-27T00:41:10.637 に答える
0

mod_rewriteソースを調べた後、後方参照はないようです。

RewriteRulesの長いリストの代わりに、とにかくRewriteMapオプションを使用することをお勧めします。これは、長いリストを反復処理するよりもはるかに高速になるためです。

于 2010-10-27T05:29:47.720 に答える