PHP SEF Link Nasıl Yapılır
23 Aralık 2009 tarihinde Selim tarafından postalanmış - 12 Yorum
Bu yazımda biraz PHP’deki SEF link olayından bahsetmek istiyorum. Script kodlarken artık önemli bir detay olarak görülüyor SEF link yapısı. Peki nedir bu SEF link dediğimiz olay. Açılımı Search Engine Friendly olan SEF, SEO dostu bir scriptte bulunması gereken olmazsa olmaz yapıdır. Yani link yapımızı arama motoru dostu bir yapıya çevirmektir. Arama motorları tarafından daha anlamlı olmasıdır linklerin.
Normalde bir script yazdığınızda ‘detay.php?id=1′ şeklinde bir yapıya sahip olur. Bunun google için hiçbir anlamı yoktur açıkcası. Biz bu yapıyı ‘haber-basligi.html’ şeklinde kelimelerden oluşan bir yapı ile listeleteceğiz. Bu şekilde her yazımızın adı urlde geçmiş olacak ve ilk durumdan daha anlamlı bir hale gelecektir linklerimiz. Bunun için öncelikle .htaccess dosyası oluşturmamız gerekiyor. Boş bir text dosyasına linklerimizi nasıl kullanacağımızı belirten kodları yazıyoruz ve .htaccess olarak kaydederek sitemizin bulunduğu dizine atıyoruz.
Kullanabileceğiniz örnek kod;
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^haber-(.*)-(.*).html$ detay.php?id=$1&baslik=$2 [L,NC]
Bu şekilde kullandığımızda linklerimiz haber-1-haber-baslik.html şeklinde olacaktır. Siz isterseniz .htaccess dosyanızda yapacağınız değişikliklerle bu yapıyı değiştirebilirsiniz. Bu işlemden sonra artık link yapısını ayarlamaya geldi sıra.
Normalde;
<a href=”detay.php?id=<?php echo $row_Recordset1['id']; ?>”><?php echo $row_Recordset1['baslik']; ?></a>
şeklinde olan yapıyı
<a href=”haber-<?php echo $row_Recordset1['id']; ?>-<?php echo $row_Recordset1['baslik']; ?>.html”><?php echo $row_Recordset1['baslik']; ?></a>
şekline dönüştürüyoruz.
Artık işlem tamam. Şu anda listeleme yaptığınızda linklerimiz detay.php?id= şeklinde değil de haber-3-baslik.html şeklinde olacaktır. Kalan son bir eksik yanı var şu an. Başlık eğer Türkçe karakter ya da boşluk karakteri içeriyorsa bu urlde kullanıldığında pek sağlıklı olmayacaktır. Bu yüzden bu boşlukları, sembolleri, Türkçe karakterleri bir fonksiyonla uygun bir hale getireceğiz.
function turkceyap($deger) {
$turkce=array(“ş”, “Ş”, “ı”, “(“, “)”, “‘”, “ü”, “Ü”, “ö”, “Ö”, “ç”, “Ç”, ” “, “/”, “*”, “?”, “ş”, “Ş”, “ı”, “ğ”, “Ğ”, “İ”, “ö”, “Ö”, “Ç”, “ç”, “ü”, “Ü”);
$duzgun=array(“s”, “S”, “i”, “”, “”, “”, “u”, “U”, “o”, “O”, “c”, “C”, “-”, “-”, “-”, “”, “s”, “S”, “i”, “g”, “G”, “I”, “o”, “O”, “C”, “c”, “u”, “U”);
$deger=str_replace($turkce,$duzgun,$deger);
$deger = preg_replace(“@[^A-Za-z0-9-_]+@i”,”",$deger);
return $deger;
}
Fonksiyonumuzu tamamladıktan sonra bu fonksiyonumuzu echo kısmında kullanıyoruz. Bunu da şu şekilde basitce yapabiliriz.
<?php $yenibaslik = turkceyap($row_Recordset1['baslik']); echo $yenibaslik; ?>
Evet artık bu işlem de tamam. Linklerimizde ne Türkçe karakter ne de boşluk veya özel karakterler olacaktır. Ve artık SEO dostu SEF linklere sahibiz…




gercekten güzel anlatım olmuş. Cok teşekkürler
bazı sistemlerde görüyorum ;
http://www.siteadı.com/Anasayfa
http://www.siteadi.com/Konu-icerik-bilgi.html
siye bundan da bahsedermisiniz sadece sayfa ici ni göstermissiniz?
Merhaba kemsay ~
Sanırım demek istediğin sadece başlık yazsın, id falan yazmasın demek istiyorsun. Bunun mantığından da bahsedim. Bunun için haberleri eklediğimiz tablomuza bir alan daha ekliyoruz. Bu alana başlığın seolu halini ekliyoruz. Örneğin, “Selim balığa çıkacak” yazısı için bu yeni eklediğimiz alana “selim-baliga-cikacak” şeklinde bir ifade ekletiyoruz. Yukarıdaki fonksiyonumuzu burada da aynen kullanabiliriz. Daha sonra da haberleri çekeceğimiz zaman idye göre değil de bu sonradan eklediğimiz seolu başlığımızın olduğu alana göre çekiyoruz. Bu sistemin bazı dezavantajları da var tabi. Aynı başlıktan 2 haber girilirse sistem biraz saçmalayabilir. Bunu da gene kodları geliştirerek, yazi, yazi-2 şeklinde değiştirtebiliriz. Umarım açıklayıcı olmuştur, kolay gelsin…
bu kod işe yarıyor. selim arkadaşımıza teşekkür ediyorum.
merhaba, yukarıda id yi elle yazmışız peki otomatik gelince htaccess e nasıl çekeceğiz normal listelememi yapacağız ?
merhaba, öncelikli olarak vermiş olduğunuz bilgiler için teşekkür ederim. Yalnız kafamda bazı soru işaretlerinden dolayı sizden böyle hazırlanmış dosyalar varsa onların üzerinde incelemek isterim . çünkü hangi kodu nereye yazacagımı karıştırdım.
öncelikle çok tşk ben birsürü yerde baktım bu konuyu böyle basit anlatan bulamamıştım ama bi sorunum var ben herşeyi yaptım çalışıyo ama bi süre sonra şöyle hata veriyo google da aradım buna bi cvp bulamadım
Bad Request
Your browser sent a request that this server could not understand.
Size of a request header field exceeds server limit.
Cookie: /ahmetbostanci/makaleler-129-Dusuk-Tehdidi-ve-Tedavisi.html_0=6; burada böyle uzayıp gidiyo
[...] [...]
Merhaba, ben şunu merak ediyorum, üstteki yöntemle linki “http://www.siteadi.com/firma/urunler-374-Limonluk-Yaglik-Sirkelik.html” formatına getirdim. ama urun_id’yi nasıl GET yapacağım? Bu linkten ürün ID sini nasıl çekeceğim??
@Osman, o dediğinde sorun yok. Normalde link yapısı .php?id=5 ise gene aynı şekilde idyi çekebilirsin. görünürde yazı şeklinde çalışsa da arka planda normal GET ile çekebileceğin sistem de çalışmakta. Normal sef linksiz düşünüp istediğin veriyi GET ile alabilirsin.
benim bu konuyla ilgili birkaç sorum olacak.
Ben nerde yanlış yaptım?
1- .htaccess dosyasını nereye kaydedeceğiz? Sitenin kök dizinine mi yoksa linkin olduğu klasöre mi?
2- .htaccess dosyasının çalışıp çalışmadığını nasıl anlayacağız?
3- Tüm bu ayarlamaları yaptığım halde neden çalıştıramadım
@Sezgin
1- .htaccess dosyasını ana dizine atacaksın.
2- Sunucunda .htaccess dosyasının çalışmasıyla ilgili gerekli izin verilmemiş de olabilir. .htaccess dosyana aşağıdaki kodu ekleyerek deneme yapabilirsin mesela. Aşağıdaki kod yönlendirme kodudur.
RewriteEngine On
RewriteRule ^(.*)$ http://www.yonleneceksite.com/$1 [R=301,L]
3- Kendi projen üzerinde değil de basit bir şekilde bi kaç dosyalık yeni proje oluşturup denersen ve olduğunu görürsen, eminim hatanın nerde olduğunu da çözeceksin. Şu anda başarılı bir şekilde çalıştıramadığın için havada kaldı bilgilerin hepsi.