Permalink
Bir sorun ve kullanım amaçlı bir bilgi olarak zoque`de açtığım bir topic üzerine konu hakkında yazılmış çeşitli kaynakları birleştirerek bir yazı oluşturmam gerektiğini farkettim.
Konumuz permalink yani kullanıcı dostu bağlantı olarak da çevirebileceğimiz ve çoğu yerde kalıcı, anlamlı, kullanıcı dostu anlaşılabilir bağlantı olarak da görebileceğimiz bir terim.
Permalink sistemi çoğunlukla blog sistemlerinde kullanılmaktadır. Fakat artık her cms (içerik yönetim sistemi)`de de kullanıcılara sunulmakta.
Ancak son zamanlarda arama motoru optimizasyonlarında, özellikle Google`ın subdomain ve url içeriğinde aranılan konularla ilgili terimlerde yaptığı sonuç sıralamasında büyük fark oluşturduğunun gözlenmesi ile genel olarak kullanılmaya başlanmıştır.
Birçok blog dağıtımından, hazır olarak bulundurulan sistemlerden örneklendirmek gerekir ise;
Blogspot
http://<kullanıcıadı>.blogspot.com/<4karakterliyıl>/<2karakterliay>/<konuadı>.html
WordPress
http://<site-belirli ön ek>/<4karakterliyıl>/<2karakterliay>/<zaman>/<konuadı>/
* biçimlerinde sunulmaktadır.
Biz varolan hazır sistemlerin dışında kendiniz bu işlemi nasıl uygularsınız buna gelelim.
Bu işlem Apache üzerinde sunucunuzda bulunan .htaccess adlı bir dosya ile yapılmaktadır. Ancak zoque`de de belirtildiği üzere bu işlem için sadace Apache ve .htaccess yeterli değildir.
Bu işi yapan modülün adı mod_rewrite`tır ve Apache`nin hem 1.3 hem de 2.0 sürümlerinde desteklediği önemli bir mod eklentisidir. Bu mod kurulu değilse veya Apache bu mod ile birlikte derlenmemişse, haliyle burada anlatılanlar da çalışmıyor olacaktır. *
Diyelim ki http://www.domain.com/details.php?id=5&baslik=Başlığımız şeklindeki url`mizi http://www.domain.com/5/Başlığımız haline çevirmek istiyoruz.
Burada dikkat etmemiz gereken url kısmında boşluk kullanamayacak olmamızdır. Burada bir kaç alternatifimiz var. “_, -, +” gibi karakterlerle boşluğun yerini doldurmamız ve arama motorlarında sonuçlandırma işleminde başarılı olmamız gerekiyor.
Ayrıca diyelim ki adresinizin RSS işlemi ile başlıklarını feed url`leri tutan ve bünyesinde sunan program/site`lerde de görünsün istiyorsunuz. O halde burada çok titiz davranmak gerekiyor.
İlgili sayılabilecek bir not: Eğer arama motoru optimizasyonu (SEO) için de biraz katkısı olsun istiyorsan _ yerine - kullanmanı tavsiye ederim. Bir yerde duyduğuma göre _ ile birleştirilen kelimeler tek bir kelime gibi anlaşılıyormuş arama motorları tarafından. Gerçi günümüzdeki robotlar bunu anlamayacak kapasitede değil ama olsun şahsi fikrimce - karakteri _ karakterine göre daha hoş duruyor. *
Çeşitli arama sonuçlarını karşılaştırdığımızda en fazla sonunu + veriyor, sonrasında - ve _ geliyor. + URLENCODING olduğundan url satırında %2B haline dönüşüyor. Boşluk karakteri de %20 haline dönüştüğünden bu iki karakteri de kullanamıyoruz. Tek alternatifimiz ise - olarak kalıyor.
�?imdi işlemlerimize geçelim;
http://www.domain.com/details.php?id=5&baslik=Başlığımız şeklindeki linkimizi
http://www.domain.com/5/Başlığımız şeklinde göstermek ve işlemek için sql ile çektiğimiz kayıtlarımızı ufak bir düzenlemeden geçirerek bazı karakterleri ayıklamalıyız. PHP`de hazırladığım ufak bir kod ile türkçe karakterlerde dahil birkaç karakteri temizliyorum.
- $bulunacak = array(”`”,”,”,”ç”,”ı”,”ş”,”ğ”,”ü”,”ö”,”Ğ”,”Ş”,”Ç”,”Ö”,”Ü”,” “,”!”);
- $degistir = array(”",”",”c”,”i”,”s”,”g”,”u”,”o”,”G”,”S”,”C”,”O”,”U”,“-”,”");
- $onarilmis = str_replace($bulunacak, $degistir, $cekilensatir);
- $onarilmis = URLencode(htmlentities($onarilmisr,ENT_QUOTES));
PHP ile linki bu şekilde düzenledikten sonra link içerisinde boşluk içeren kısımları -`a çevirdik. �?imdi .htaccess düzenlemesi ile son işlemlerimizi de halledelim.
- Options
- RewriteEngine on
- RewriteBase /
- RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9\_]-)/?$ detail.php?id=$1&baslik=$2
Yukarıdaki kodu açıklamak gerekirse;
RewriteEngine on ile sunucuya anlamlı link tekniğine başladığımızı söylüyoruz.
RewriteRule ile sonrasında belirli karakter kodlamalarını adres ile değiştirip gerekli işlemi başlatmış oluyoruz.
Bizim yazdığımız kodda;
http://www.domain.com/?id=5&baslik=Başlığımız bu olsun
Şeklinde iki adet değer bölümümüz bulunuyor. id ve baslik. Bunların aldıkları değerleri / le böleceğimiz için aldıkları değerleri parselemeliyiz. ^([A-Za-z0-9]+) ile id değerimiz yani $1 değişkeninin karakter kodlamasını alıyoruz. id değerimiz sadece sayısal/integer ifade ise 0-9 olması yeterlidir. Bu şekilde birinci parseleme işlemini halletmiş oluyoruz. Aynı şekilde ikinci parse alanında da bu işlemi yapıyoruz. Ancak birinciden farklı olarak bu defa - karakterini de için içine dokmalıyız ki urlmizde boşlukları - olarak işleme koyabilelim.
Sonrasında detail.php dosyasından sonraki kodları parselemiş ve bunu da .htaccess`a açıklamış oluyoruz.
Bu işlemi ISAPI filterlar sayesinde Windows Server`da yapmak için;
domain.tld/product.asp?id=123
domain.tld/product/123
domain.tld/product/123.html
domain.tld/product/123.htm
…
Not-2: URL Rewrite sadece URL yazmak için değil , aynı zamanda spider yönlendirme, emailextractor koruması sub domain yönlendirmesi…vs.vs. gibi bir çok faydalı işe yaramakta. *
Kaynaklar;
Wikipedia / Permalink
URL Encoding
PHP.net
Apache
Eğer yazıyı beğendiyseniz ya da ekleyecekleriniz varsa, lütfen yorumunuz yazın veya RSS aboneliği ile yeni yazılardan anında haberdar olun.
Yorumlar
Teşekkürler Umut.
Arama motorları ile ilgili hazırladığım makale ile bu konunun devamını da getireceğim fırsat bulduğumda.
[...] AKSAN - Görsel İletişim & Grafik TasarımTamamlanmamış Makaleler « Permalink • TÜM YAZILAR • Mandabatmaz [...]
ben php-fusion için kullanmak istiyorum..
$bulunacak = array(”`”,”,”,”ç”,”ı”,”ş”,”ğ”,”ü”,”ö”,”Ğ”,”Ş”,”Ç”,”Ö”,”Ü”,” “,”!”);
$degistir = array(””,””,”c”,”i”,”s”,”g”,”u”,”o”,”G”,”S”,”C”,”O”,”U”,“-”,””);
$onarilmis = str_replace($bulunacak, $degistir, $cekilensatir);
$onarilmis = URLencode(htmlentities($onarilmis,ENT_QUOTES));
bu kodu biraz daha açarsanız sevinirim.. :(
hocam bi sürü yazı yazdım soldaki kutuları doldurmadan göndere tıklamısım hepsi silindi ya çok kötü oldu simdi o kadar seyi yazmaya üsendim..
söyle anlatayım
hocam sorunum türkçe karakter,
URLencode(htmlentities($onarilmis,ENT_QUOTES));
bunu yaptıgımda ise linkteki türkçe karakterler;
“Beğendiğim”
“Beðendiðim”
seklinde oluyor urlencode yapmadıgım zaman
” ş ğı ” bu karakterleri yazdıgımda değişmiyor hatta hiç bişey cıkmıyor ” Þ ð ý ” bu karakterleri yazınca değiştiriyor,
yardım ederseniz çok sevinirim
budur hocam
iso-8859-9
ama
windows-1254 denedim
yine aynı
simdi ben ” Þ ð ý ” bu sekle razıyım tamam, ama üst tırnak olan başlıklar acılmıyor..
yani link bu sekil görüneceğine
..forum/43_27_Yasebo’nun-dikkatine.html
bu şekil görünüyor..
..forum/43_27_Yasebo#39;nun-dikkatine.html
:S
1. $bulunacak = array("`", ",", "ç", "ı", "ş", "ğ", "ü", "ö", "Ğ", "Ş", "Ç", "Ö", "Ü", " ", "!", "?", "\"", "’", "'");
2. $degistir = array( "", "-", "c", "i", "s", "g", "u", "o", "G", "S", "C", "O", "U", "-", "", "", "", "", "");
3. $onarilmis = str_replace($bulunacak, $degistir, $cekilensatir);
4. $onarilmis = URLencode(htmlentities($onarilmisr,ENT_QUOTES));
bu şekilde kullanabilirsin.
bir ruby örneğiyle katkıda bulunmak gerekirse :)
string = Iconv.iconv(’ascii//ignore//translit’, ‘utf-8′, str).to_s
string.gsub!(/\W+/, ‘ ‘).gsub(/\ +/, ‘-’)
Sitemdeki script hazır script oLmamakLa birLikte. Seo konusunda biraz geLiştirmek istiyorum. Bunun içinde İçerik yazıLarımın LinkLerinin
http://sitem.com/icerik.php?id=354 iken Htaccess iLe http://sitem.com/icerikbasligi.html şekLinde gözükmesini istiyorum..
Scriptte baslik?> komutu iLe içerik başLığı sayfaya yazdırılıYor.
Ayrica http://sitem.com/kategori.php?cid=11 halinde oLan linkleride
http://sitem.com/kategorismi.html şeklinde göstermek istiyorum..
kategori);?> komutu ile kategori ismi sayfaya yazdırılmakta..
Ayrıca title kısmında da kategori ismi gozuksun istiyorum. php bilgim olmadığımdan kategori ismine title a nasıl yazdırırım..
Peki elimdekiLerLe nasıl bir htaccess dosyası ile bu dediğimi yapabiLirim.. Htaccess dosyasını yaptıktan sonra bunu nasıl siteme yansıtabiLirim.. Link verme kodu açısından..
Merhabalar,
http://www.ismimis.com/asd/10 şeklideki kullanımda bir sorun yok.
Ancak linkte başlıkta boşluk yerinde - (eksi) karakterini kullanmak istiyorum. Kullandığım zaman da sayfa görüntülenemiyor.
Bunu nasıl düzeltiriz….
RewriteEngine on
RewriteBase /
RewriteRule ^([A-Za-z0-9]+)/?$ index.php?id=$1
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9\_]+)/?$ index.php?id=$1&baslik=$2
RewriteRule ^([A-Za-z0-9]+)/([A-Za-z0-9\_]+)/([A-Za-z0-9\_]+)/?$ index.php?id=$1&baslik=$2&s=$3
Merhaba, yazı gerçekten çok faydalı. Ben de takıldığım bir sorunu sormak istiyorum. Mümkünse cevaplarmısınız?
ReWriteRule ^([a-z0-9_-]+)/([0-9]+)$ index.php?ulke_id=$1&s=$2&sayfa=ulkeler [L,NC]
kodu ile ,
http://www.siteadi.com/Turkiye veya
http://www.siteadi.com/Turkiye/3 veya
http://www.siteadi.com/Turkiye/3/ şeklinde gelen url’leri alıyorum. Fakat
http://www.siteadi.com/Turkiye/ şeklinde gelen url’leri alamıyorum.
Kafaya taktım bunu :) Nasıl çözebilirim acaba bu durumu ?

vallaha işte bu : )
harika içerikli bir yazı olmuş ellerine sağlık demekten kendimi alamıyorum :)