SEO dostu URL ayrıştırmak için apache mod_rewrite kullanarak

2 Cevap php

Nasıl bir şey gibi dönüştürebilirim

me.com/profile/24443/quincy-jones

karşı

me.com/profile.php?id=24443

falan gibi

me.com/skarşıre/24111/robert-adams

karşı

me.com/skarşıre.php?id=24111

mod_rewrite ile?

Can I make the reverse conversion as well with mod_rewrite, or would I have karşıparse it through PHP?

2 Cevap

Bu ikisi için de çalışması gerekir:

RewriteEngine on
RewriteRule ^([^/]+)/([^/]+).*$ $1.php?id=$2 [L]

Açıklama:

^           - beginning of the string
([^/])      - first group that doesn't contain /
              will match both 'profile' and 'store'
              will also be referenced by $1 later
/           - first slash separator
([^/])      - second group, id in your case
              will be referenced by $2
.*          - any ending of the request uri
$           - end of request string

Sen de bu yüzden sadece iki isteği yeniden ve sadece rakam kimliği olarak kabul edilir daha hassas yapabilir:

RewriteRule ^((profile|store))/(\d+).*$ $1.php?id=$2 [L]

O, emin etkin mod_rewrite apache modülü var olun:

RewriteEngine on

RewriteRule ^/profile/([^/]*)/([^/]*)$  /profile.php?id=$1 [L]

RewriteRule ^/store/([^/]*)/([^/]*)$    /store.php?id=$1 [L]

(Yani orijinal URL değil çünkü) muhtemelen, özellikle sondaki isim kısmı, PHP ters durumu idare etmek isteyeceksiniz. Eğer isim vermeden mod_rewrite'ı bunu işlemek istiyorsanız, size bir çift içinde yeniden sonunda yok emin olun (kendi kuralları sırasına bağlıdır). Ayrıca, kural kullanılan sonuncusu (bir maç varsa sonraki kurallar atlanacak) yapmak için (son) anahtarını [L] kullanabilirsiniz.

Ayrıca, daha genel bir yeniden yazma kuralı yapmak mümkündür, ancak dikkatli etkilenebilecek diğer URL'ler hakkında düşünmek gerekir.