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
Yazı Kategorisinden Son Yazılar
- Font Kullanımları - 24 October 2008
- DinoDream v2 - 25 September 2008
- "Fikir" İle İlgili Cevherler - 24 September 2008
- Markalarla Bir Hafta - 23 June 2008
- 3Jam, Kısa Mesaj Servisi - 19 June 2008




10 Kasım 2006, 5:17 pm tarihinde.
vallaha işte bu : )
harika içerikli bir yazı olmuş ellerine sağlık demekten kendimi alamıyorum :)
11 Kasım 2006, 10:04 am tarihinde.
Teşekkürler Umut.
Arama motorları ile ilgili hazırladığım makale ile bu konunun devamını da getireceğim fırsat bulduğumda.
11 Kasım 2006, 5:00 pm tarihinde.
[...] Buradaki makalemde bu konuya satır aralarında kısaca değinmiştim.
23 Kasım 2006, 11:23 am tarihinde.
[...] Bu işlem için yapmanız gereken PHP, .htaccess düzenlemeleri… Daha ayrıntılı bilgi… [...]
12 Aralık 2006, 11:09 am tarihinde.
Bigiler için teşekkürler
19 Aralık 2006, 4:03 pm tarihinde.
Peki permalinki Windows serverda yapmamızın bir şansı var mı acaba?
19 Aralık 2006, 10:03 pm tarihinde.
Engin
ASP ile hazırlamak için mi yoksa php ile windows server`da kullanmak için mi belirtmemişsin ancak ben sana konu ile alakalı olarak şu ve şu adresleri önereceğim.
05 Şubat 2007, 2:14 am tarihinde.
[...] AKSAN - Görsel İletişim & Grafik TasarımTamamlanmamış Makaleler « Permalink • TÜM YAZILAR • Mandabatmaz [...]
12 Mart 2007, 2:20 pm tarihinde.
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.. :(
12 Mart 2007, 8:40 pm tarihinde.
yasebo
bu konuyla ilgili daha farklı kullanım örnekleri için php manuel`i inceleyebilirsin.
14 Mart 2007, 12:33 pm tarihinde.
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
14 Mart 2007, 2:41 pm tarihinde.
yasebo
Karakter kodlaman nedir acaba?
14 Mart 2007, 2:55 pm tarihinde.
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
22 Mart 2007, 12:54 pm tarihinde.
[...] kullanilabilir? Forum i
22 Mart 2007, 1:19 pm tarihinde.
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.
22 Mart 2007, 4:13 pm tarihinde.
[...] ne kullanilabilir? Forum i
25 Mayıs 2007, 11:18 pm tarihinde.
bir ruby örneğiyle katkıda bulunmak gerekirse :)
string = Iconv.iconv(’ascii//ignore//translit’, ‘utf-8′, str).to_s
string.gsub!(/\W+/, ‘ ‘).gsub(/\ +/, ‘-’)
25 Mayıs 2007, 11:23 pm tarihinde.
Çok teşekkürler Onur
25 Mayıs 2007, 11:27 pm tarihinde.
ah bir typo -_-
string.gsub!(/\W+/, ‘ ‘).gsub!(/\ +/, ‘-’)
25 Mayıs 2007, 11:30 pm tarihinde.
ceyhun yazı harika biz teşekkür ederiz :x
16 Haziran 2007, 7:30 pm tarihinde.
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..
Sitem: http://www.karabukrehberi.com
17 Ağustos 2007, 1:36 pm tarihinde.
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
28 Ağustos 2007, 1:11 pm tarihinde.
teşekkürler, gerçekten faydalı olmuş.
20 Ekim 2007, 2:52 pm tarihinde.
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 ?
28 Nisan 2008, 11:57 pm tarihinde.
blogspotta yapabilirmiyiz bu dediğinizi?