2009-03-21 19 views
0

iはルールがあります。PHPモッズ書き換え

 
cat_ap~pnid~290~nid~96666~posters~Sports.htm 

ニーズcat_ap.phpし解決するには?PNID = 290 & NID = 96666(私はレガシー有料の検索トラフィックのためにそこにそれが必要なのですけれども、私は、リンクの端と心配していませんよ)。

ページングを計算するには、リンクからpage_numを取得する必要があります。

 
cat_ap~PageNum_GetProduct~10~nid~290.htm needs to resolve to cat_ap.php?PageNum_GetProduct=10&nid=290 

これらのシナリオをすべて単一のルールまたは複数のルールに含める必要があります。

アイデア?私はこれを今読んでいるが、つかまっている。

おかげ

答えて

1

を私はルールするRewriteRule^cat_ap(。〜*)を使用することをお勧めしたいHTM $ /都市/。 cat_ap.php?$ 1 [L]すべての可能な組み合わせをキャッチし、PHPアプリケーション内の文字列を分解するためです。

この方法では、apacheが時にはかなり悪魔になることがあるので、パラメータをデバッグする方が簡単です。

0

は両方のケースのためにこれを試してみてください:シナリオのこの種の

RewriteRule ^cat_ap~([^~]+)~([0-9]+)~([^~]+)~([0-9]+)(.*)\.htm$ /urban/cat_ap.php?$1=$2&$3=$4 [L] 
1

ここにあなたのURL内のキー/値のペアをループするソリューションです。

RewriteRule ^cat_ap~([^~]+)~([^~]+)(.*)\.htm$ cat_ap$1?$1=$2 [N,QSA] 
RewriteRule ^cat_ap(.*)\.htm$ /urban/cat_ap.php [L] 

それは、その後、そのペアせずに正確に同じURL にそれを書き換えて追加し、URLオフ最初のペアをつかむにはそのペアをクエリ文字列([QSA])に置き換え、再度書き換えプロセスを開始します([N])。 URLにキーと値のペアがなくなると、それはスクリプトの場所に書き換えられ、書き換えが終了します([L])。

cat_ap~pnid~290~nid~96666~posters~Sports.htm => /urban/cat_ap.php?posters=Sports&nid=96666&pnid=290 
cat_ap~PageNum_GetProduct~10~nid~290.htm => /urban/cat_ap.php?nid=290&PageNum_GetProduct=10 

(パラメータの順序が逆になることに注意してください。同じパラメータが複数回現れた場合、これが唯一の問題であろう)

+0

実際には、[R]は301がその可能性、ブラウザにリダイレクト送信します多くのパラメータがあると、長い(そして不要な)HTTPリダイレクトの連鎖が発生します。代わりに[N]を使用することをお勧めします(コンテキスト:[N、QSA])。 –

+0

ありがとう、それは私が意味するものです。 >。< –