PHP / MySQL / .htaccess ile Arama Motorlarının ve Ziyaretçilerin Anlayacağı Şekilde URL Yapılandırması (SEF URL), HEADER ve FOOTER MasterPage Kodlamak

Bir sayfa adresi, yani URL en basit hali ile tasarlanmalı. Yani o URL’ye bakan bir insan bu sayfanın içinde neler var az çok anlayabilmeli. Mesela şu iki linki inceleyin… http://www.ugurgelisken.com/index.php?id=123&sub=23467 http://www.ugurgelisken.com/kitaplar/mobil-oyun-programlama/ Veya http://www.ugurgelisken.com/kitaplar/mobil-oyun-programlama/index.html Gördüğünüz gibi ikinci olan URL daha anlaşılır bir yapıdadır. Birinci link yapısını PHP veya ASPX gibi sunucu taraflı dillerle sayfa programlayanlar, tek bir sayfa üzerinden (master page) URL’den parametreler alarak sayfaların içeriklerini veritabanından çeker. İkinci yapıda ise genelde statik olan web sayfaları programlayan kişiler daha çok kullanır (eskiden öyleydi). Bu kullanımda kitaplar klasörü içinde yer alan mobil-oyun-programlama adlı alt klasör içindeki index. çağırılıyor gibi görünüyor, ancak öyle değildir. Kafanız karışmasın. İkinci linkte görüldüğü gibi alt dizinler şeklinde bir tanımlama yapılmış ve daha anlaşılır bir mantık kurulmuş. Fakat görüldüğü gibi web sunucusunda kitaplar altında mobil-oyun-programlama diye bir klasör bulunmamaktadır. Bu mantıkla ilk URL ve ikinci URL’yi birbiri ile eşleştirelim. Eşleştirme sonucunda id değişkenimizin değeri kitaplar, sub değişkenimizin değeri de mobil-oyun-programlama olmaktadır. Yani ikinci URL’de aslında değişken atamaları yapılıyor. Değerleri ayırmak için de / operatöründen faydalanılıyor. Şimdi bu mantığı bir örnek üzerinde inceleyelim. Kitapta az çok PHP ile programlamayı gördük. Bu tür URL kısaltmaları yapma işlemine SEF URL denmektedir. SEF URL de bir çeşit illüzyondur, yani aslında öyle bir adres olmamasına rağmen web sitemiz 404 hatası vermiyor ve kullanıcının görüntülemek istediği içeriği sunuyor. Biz de PHP ile basit bir SEF URL yapısı inceleyelim. SEF URL yapısını inceleyebilmemiz için basitinden bir web içeriği oluşturalım. Öncelikle Cpanel’den bir veritabanı oluşturalım. MySQL Databases butonuna tıklayın.

Açılan sayfada veritabanı adını girin. Benim domainimde ugurgelisken.com olduğu için ilk birkaç harfi sabit alıyor. Siz de ona göre _sefurl yazın. Create Database butonuna tıklayın, yeni açılan sayfada onaylayıp geri dönün. Daha sonra veritabanı için Add a New User kısmında bir kullanıcı (ugurgeli_ugur) ve kullanıcı şifresini girip, Create a User butonuna tıklayıp oluşturun. Oluşturma işleminden sonra sayfada kullanıcı adı User listesinde görünecek. Bu kullanıcıyı Add butonuna tıklayarak veritabanı için yönetici yapın. Açılan sayfada tüm yetkileri seçip onaylayarak, kullanıcıyı tam yetkilendirin.

ugurgeli_sefurl şeklinde veritabanımızı oluşturduk. Cpanel’e tekrar geri dönün (sayfanın sol üst köşesinde yer alan ev ikonuna tıklayarak) ve phpMyAdmin butonuna tıklayın. Üst menüden SQL sekmesine girin ve aşağıdaki kodları yazıp Git butonuna tıklayın.

Görüldüğü gibi sefurltest şeklinde bir tablo ismi, ID (Primary Key), SAYFA_BASLIGI, SAYFA_ICERIGI, SEFURL şeklinde de sütun başlıklarını oluşturdum. Şimdi de biraz içerik girelim…

SEFURL tablosunda link isimlerini verirken Türkçe karakter kullanmamaya çalışıyoruz. Bazen bazı sayfalarda linklerin içinde Türkçe karakterler kullanıldığını görmüşsünüzdür. İsterseniz o şekilde de yapabilirsiniz ama ek olarak GET ile almış olduğunuz (birazdan kodlar içinde göreceksiniz) Türkçe karakterli bağlantı adresinden Türkçe karakterleri ayıklayıp İngilizce karakterler ile değiştirmelisiniz. Yani adresteki sayfa/iletişim bağlantısı yerine sayfa/iletisim olacak şekilde yeniden düzenlemeniz gerekecek.

Girdiğimiz veriler, aşağıdaki şekilde görüldüğü gibi tabloya işlenmiş. Sonuç itibari ile 3 farklı sayfamız ve içeriği yer alıyor. Verileri ekledikten sonra veya öncesinde tablonun karakter kodlama setini utf-8_turkish_ci olarak belirtiniz. Bunu yapmak için Düzenle butonuna tıklayıp ekranın sağ tarafındaki listeden kodlama türünü seçip kaydetmeniz yeterlidir. Normalde veriler site için bu şekilde girilmez. Daha önceki bölümlerde gördüğümüz CMS panelleri ile bu tür veriler girilir. Anca şu an SEF URL metodunu öğrenmeniz için böyle pratik bir yol üzerinden ilerliyoruz.

Şimdi de SEF URL mantığı ile link düzenleme işlemimizi PHP ile kodlayalım. Kodlarımı yazarken kendi sunucumda IP üzerinden yazdım. Yani herhangi bir domain yönlendirmesi yok. Yani http://195.142.1.243/~ugurgelisken/ yazan yere, kendi test doman’inizi yazmanız gerekmektedir, kafanız karışmasın. İlk olarak adres bağlantılarını yönetecek olan htaccess dosyamızı hazırlayalım. Herhangi bir metin editöründe aşağıdaki kodları yazın ve *.htaccess uzantısı ile kaydedin.

Bu kod yapısında sayfagetir.php isminde bir PHP dosyamız var. Bu dosyaya ise sayfa adında bir değişken ile değer gönderiliyor. Bu değer, URL’den alınan parametredir. Bir veri ayıklama deseni (RegExp) ile değer elde ediliyor. Ziyaretçilerin gördüğü adres şu şekildedir: http://www.ugurgelisken.com/sayfa/ana-sayfa http://195.142.1.243/~ugurgelisken/sayfa/ana-sayfa Ancak bu adres .htaccess içinde yer alan kodlar sebebiyle şu şekle dönüşür. http://www.ugurgelisken.com/sayfagetir.php?sayfa=ana-sayfa http://195.142.1.243/~ugurgelisken/ sayfagetir.php?sayfa=ana-sayfa Görüldüğü üzere /sayfa/ adres gruplamasını siliyoruz ve sonundaki değeri parametre olarak alıyoruz. Hazırladığınız .htaccess dosyasını FTP programı aracılığı ile sunucunuzun kök dizinine, yani public_html dizinine atın. Şu aşamada sunucumuzda veritabanında 3 sayfalık verimiz var ve .htaccess yapılandırmamızı yaptık. Şimdi de veritabanındaki verilere göre basit bir menü yapmamız gerekiyor. Menü içerisinde sayfanın ismi ve sayfa ismine ilişkilendirilmiş olan linkler yer alacak. Örneğimizi yaparken en sade hali ile yapıyoruz. Yani herhangi bir CSS veya Framework kullanmayacağız. Dileyenleriniz mantığı iyice kavradıktan sonra tasarım üzerinde geliştirmeler yapabilir ve uygulamayı detaylandırabilir. Veritabanındaki verilere göre menümüz şu yapıda olacak: Ana Sayfa | Hakkımızda | İletişim Şimdi bu menümüzü oluşturalım. Menüyü, daha doğrusu ana sayfayı oluşturmak için bir index.php sayfası oluşturacağız. Kodlar içinde yer alan açıklama satırlarını inceleyip kodların işleyişi hakkında düşününüz. Kod yapımız aşağıdaki gibidir: index.php

Yazdığımız kodlara göre veritabanından veriler çekili menü oluşturulacak. Sonuç aşağıdaki gibi olacaktır:

Hazırlamış olduğumuz linklere göre bağlantılarımızın orijinal halleri şöyledir: http://195.142.1.243/~ugurgelisken/sayfa/ana-sayfa http://195.142.1.243/~ugurgelisken/sayfa/hakkimizda http://195.142.1.243/~ugurgelisken/sayfa/iletisim Bu yazdırmış olduğumuz URL’lerin hiçbiri çalışmıyor. Linkleri tıkladığımızda sayfa bulunamadı hatası gelecek:

Veritabanı yönetimi konusunu daha önceki bölümlerde işlerken MySQLi kullanmıştık. Bu bölümde bilerek MySQL kullanımına yer verdim. Böylece iki farklı veritabanı sisteminin farklılıklarını görüp kullanım metotlarını birbiri ile karşılaştırabilirsiniz. Şimdi işin asıl kısmında geliyoruz… Şimdi .htaccess dosyasında tanımlamış olduğumuz (RewriteRule ^sayfa/([a-zA-Z0–9]+)/$ /~ugurgelisken/sayfagetir.php?sayfa=$1 [L1]) sayfagetir.php dosyamızı kodlayalım… sayfagetir.php

Evet, işte hepsi bu kadar! Sonuçları analiz edelim… Hakkımızda sayfası:

Diğer sayfalar da bu yapıya göre çalışacaktır.

--

--

Full-stack Developer [ UI / UX | JAM Stack | ME(A,R,V)N | LAMP ], Author, Pro Gamer

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Uğur GELİŞKEN

Full-stack Developer [ UI / UX | JAM Stack | ME(A,R,V)N | LAMP ], Author, Pro Gamer