php mod rewrite

3 Cevap php

i olan bir kural var:

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

cat_ap.php gider? nid = xxxxxxx

Şimdi diğer bazı destek eklemek zorunda.

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

(Ben eski ödenen arama trafiği için orada gerek yok gerçi bağlantının sonu ile ilgili değilim)? pnid = 290 & nid = 96666 cat_ap.php çözmek gerekiyor.

Ayrıca, ben sayfalandırma hesaplamak için bağlantı dışında bir page_num almak gerekir.

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

Ben tür tek veya çoklu kuralları içine tüm bu senaryoları kapsayacak gerekir.

Herhangi bir fikir? Ben bu hakkı şimdi okuma ama şaşırıp ediyorum.

Teşekkürler

3 Cevap

Bu senaryoda ben tüm olası kombinasyon yakalamak ve php uygulama içinde dize ayrıştırmak için kuralı RewriteRule ^cat_ap(~.*).htm$ /urban/cat_ap.php?$1 [L] kullanmak öneririm.

Apache bazen çok piç olabilir çünkü bu sayede o, hata ayıklama parametreleri daha kolay olacaktır.

İşte bir çözüm hangi URL anahtar / değer çiftleri üzerinde döngü olacak:

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

Bu URL off ilk çifti, daha sonra without Bu çifti, ([QSA]) sorgu dizesi çifti ekler aynı URL'ye yeniden yazar kapmak ve tekrar tekrar yeniden işlemini başlatır ([N]). URL artık anahtar / değer çiftleri olduğunda, bu scriptin konuma yeniden yazar ve yeniden sonlandırır ([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

(Parametrelerin sırası tersine unutmayın; aynı parametre birden fazla görünüyorsa bu yalnızca önemli olacaktır.)

Her iki durum için bu deneyin:

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