mod_rewrite

4 Cevap php

Benim şu anki kod böyle bir şeydir

skarşıre.php?skarşıreid=12&page=3

ve ben böyle bir şey çevirmek için arıyorum

mysite.com/roberts-clothing-skarşıre/skarşıre/12/3

ve böyle bir şey:

profile.php?userid=19

karşı

mysite.com/robert-ashcroft/user/19

I understand that it's best karşı have the SEO-friendly text as far left as possible, ie not

mysite.com/user/19/robert-ashcroft

(Ne stackoverflow yapar)

I can't figure out how karşı do this in apache's mod_rewrite. Any help?

4 Cevap

Aslında, mod_rewrite ile "ters" düşünmek zorunda kalabilirsiniz.

Kolay yolu yapmak için o sizin PHP emit the rewritten mysite.com/roberts-clothing-store/store/12/3 links.

mod_rewrite will then proxy the request to one PHP page for rewrite.php?path=roberts-clothing-store/store/12/3 that will decode the URL and sets the arguments (here storeid and page) and dynamically include the correct PHP file, or just emit 301 for renamed pages.

mod_rewrite ile saf bir çözüm mod_rewrite usta değil, özellikle zaman mümkündür, ancak this one is much easier sağ olsun.

main prob overhead Bu önemli olabilir ile olabilir ama sadelik fiyatı olduğunu esneklik. mod_rewrite çok daha hızlıdır

Update :

Diğer mesajlar do questionn cevap, ancak kanonik adresler sahip (ve ok gibi görünüyor tüm bu URL'ler için 301/404 kullanarak kaçınılması tipik yinelenen içerik sorunu çözmek yok, ama değil .)

Bu kuralları deneyin:

RewriteRule ^[^/]+/store/([0-9]+)/([0-9]+)$ store.php?storeid=$1&page=$2 
RewriteRule ^[^/]+/user/([0-9]+)/ profile.php?userid=$1

Ama böyle URL'ler kullanmak olmaz. Onların seviyeleri gibi hiyerarşi ve yol kesimleri olarak URL yolu düşündüğümüz zaman onlar mantıklı değil.

. Sonra tıpkı bir htacces içinde RewriteRule yönergesini kullanabilirsiniz:

RewriteRule roberts-clothing-store/store/(\d+)/(\d+)$ store.php?storeid=$1&page=$2 [L]

Yardım için http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html Bak, ya google.

. Benim yaklaşım mümkün htaccess kadar kolay hale getirmek ve PHP tüm zor işleri yapmak için:

RewriteRule ^(.*?)$ index.php?$1

Bu temelde (css / javascript / görüntü dizinleri ben sadece bu dosyaların büyük erişim "RewriteRule off" kullanın) her şeyi almak ve benim index.php dosyasına yönlendirmek anlamına gelir. PHP I'e göre sadece tüm parametrelerini kontrol etmek için ("/", $ param, 5) dize ve bir foreach çalıştırın () bölünmüş. Güzel bir işlevi kapsüllü bu benim için çalışıyor.

Update:

() Düzenli ifadeler kullanarak yüküyle gelmiyor patlayabilir, çünkü bu kolay bir durum için ben son derece yerine split (kullanarak patlayabilir kullanımını ()) tavsiye ederim.