Kullanıcı dostu URL oluşturma (2. teknik)
Bundan daha önceki bir yazımızda kullanıcı dostu url oluşturma’dan bahsetmiştik. Ancak orada kullanıdığımız teknikte işlemi gerçekletirecek dosyayı uzantısız olarak kaydetmemiz gerekiyordu, bu da biraz zahmetli oluyordu.
Şimdi ise daha kullanışlı bir teknikten bahsedelim, üstelik bu teknikte uzantısız dosya falan yok
Amaç
Amacımız adres satırını biraz daha kullanışlı hale getirmek, soru işaretlerini falan kullanmamak. Yani site.com/yazilar.php?yazi=12 adresini site.com/yazilar/yazi/12 şekline çevirmek.
Teknik
Tekniğimiz şu şekilde olacak:
– site.com/yazılar adresi site.com/yazılar.php dosyası demek olacak
– bunu sağlamak için .htaccess dosyası kullanacağız.
– site.com/yazılar/4/12 adresi ise site.com/yazılar.php?paremetre1=4&paremetre2=12 adresine tekabül edecek.
– Bu parametreleri her sereferinde ayıklayacağız.
.htaccess dosyası
.htaccess dosyamızın içerisinde şu basit kod yer alıyor:
RewriteEngine on RewriteRule .* - [env=REWRITE_ON:1] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [L]
Bu kodun amacı adres satırında her ne yazıyor olursa olsun, index.php dosyasını çalıştırmak. Böylece sitemize gelen her istek index.php dosyasından geçiyor olacak.
index.php dosyası ve verileri işlemek
index.php dosyası verileri işleyeceğimiz dosya ve içeriği ise:
$url = $_SERVER['REQUEST_URI']; $url = explode('/', $url); $dosya = $url[2]; $parametre1 = $url[3]; $parametre2 = $url[4]; include($dosya.'.php');
index.php dosyasının yaptığı iş url’den dosya adını alıyor ve o dosyayı çağırıyor. Ayrıca parametreleri de tanımlıyor, böylece çağrılan dosya ilgili parametrelere de erişebilimiş olacak.
Sonuç
Burada kullandığımız mantık ile uzantısız dosya isimlerine gerek kalmıyor ve gelen her istek index.php dosyasına yönlendirildiği için, bu dosya yarıdımıyla istenilen dosyayı çağırıp çalıştırabiliyoruz.
Burada dikkat etmemiz gereken bir kaç nokta da var tabii ki. Bunlardan birincisi dosya ismi tanımlı değilse ne olacak? include() ile çağırırken $dosya değişkeninin içeriğini kontrol etmeli ve atanan her hangi bir değer yoksa o halde esas ‘index.php’ dosyasını çağırmalıyız.
Bir diğer nokta da, çağrılan dosyaların izin verilen dosyalar olması. Yani url’den ayıkladığımız dosya ismini direkt olarak include() fonksiyonunun içerisine sokmamalıyız, ondan önce gelen veriyi kontrol etmeli ve güvenlik için belirlediğimiz kriterlere uyup uymadığını gözden geçirmeliyiz.
Bir sonraki php yazısında görüşmek üzere!
- Ya da bu blogda yer alan bütün yazıları içindekiler sayfasında görüntüleyebilirsiniz. Tıklayın!
Kullanıcı dostu URL oluşturma (2. teknik) yazısına 9 Yorum yapılmış.
görüşünü belirt
Arama
E-Posta Aboneliği
RSS Aboneliği
En Çok Yorumlanan Yazılar
- Blogger’da “devamını oku” bağlantısı (21)
- Ajax ile dinamik listeleme (21)
- MySQL’de Transaction ve PHP ile kullanımı (16)
- PHP ile sınırsız alt kategori mantığı (14)
- Kullanıcı dostu url hazırlamak (12)
- PHP’nin (muhtemelen) az bilinen 10 özelliği (12)
- Kullandığınız programlama dili ne kadar popüler? (12)
- MySQL’de “join” kullanımı (11)
- .htaccess konuları [Giriş] (11)
- Blogger’da arama kutusu ekleme (10)
Etiketler
Son Yorumlar
- isa engiz: Yazı için teşekkürler. sabit ip 2.75 tl. bu ücreti verip kendi web sunucumuzu kurabiliriz… En yakın...
- osman: Yazı için teşekkürler. Pardus projesinin Türkiye için çok önemli olduğunu düşünüyorum. Ancak yazıda da...
- Mustinet: siblings kullanarak da yazılabilir. Teşekkürler
- is: CSS kullanmadan sadece HTML kodlarıyla yanyana iki sütun (tablo kullanmadan) oluşturulabilir mi?
- Doğan Yılmaz: verdiğiniz bilgiler için çok ama çok teşekkür ederim. artık sıkı bir takipçiniz olmaya karar verdim
04 / Ekim / 2008
Ben de şurada benzer birşey anlatmıştım.
biraz karışık geldi hocam bana bu yöntem misal db den veri cekiyoruz id alıp kategorilere göre listeleme vs.. yapıyoruz ozaman nası olcak bu olay ben genelde her sayfa ve link için ayrı rewriterule yazıyodum
her sayfa için tek tek rewrite kuralı tanımlamak biraz zaman alabilir ve ayrıca bir güncelleme gerektiğinde tek tek güncellemek gerekir…
Bunun yerine gelen bütün adresleri index.php dosyasına yönlendiriyoruz. (bu dosya index.php de olmayabilir, bizim istediğimiz bir dosya, mesela linkyonet.php diye bir dosya olsun) Bu dosyanın görevi, url’deki paremetrelere göre gereken dosyayı çağırmak ve doğru içeriği kullanıcıya göstermektir.
yani iki temel aşama var:
1 – .htaccess ile bütün url’lerin linkyonet.php dosyasına gelmesini sağlıyoruz
2 – linkyonet.php dosyasının içerisinde de hangi dosya isteniyorsa onun çağrılmasını sağlıyoruz.
Veritabanından id çekip bir dosyaya göndereceğiniz zaman da linki ona göre veriyorsunuz, mesela diyelim ki, yazigoster.php diye bir dosyamız var, bu dosyanın 211 idli yazıyı veritabanından çekip göstermesini istiyoruz, o halde sitemizde gözüken url şöyle olacak: http://site.com/yazigoster/211 . bu url direkt olarak linkyonet.oho dosyasına yönlendirilecek, linkyonet.php dosyası da url’den parametreleri ayıklayacak, gereken dosyayı çağıracak. Çağrılan dosya da $parametre1 değişkenin değerine göre veritabanından ilgili yazıyı çekip gösterecek…
peki performans olarak hangisi daha kulanışlı sence ?
“kullanıcı dostu url kullanma”, bunu kullanmamaya göre göre tabi ki performans açısından sorgulanabilir, ancak gözle görülür bir performans kaybı yaşatmaz. Bir php uygulamasının performansını düşünmek istersek, uygulamanın performansını genel olarak ele almalıyız. Veri tabanı yapısı, indexler, sorgu cümlelerinin yazım şekilleri, cache kullanımı, php kod yazım alışkanlıkları sadece uygulama açısından performans kriterleridir. Ayrıca performansa asıl (öncelikle) etki eden sunucunun donanımsal özellikleridir. Bunların hepsi birleşip uygulamanın genel performansını belirlerler. Sadece “kullanıcı dostu url oluşturma” tekniğinin yaratacağı performans kaybı çok küçük olacaktır ki, bu performans kaybını uygulamanın başka bölümlerinde optimizasyon yaparak her halükarda geri kazanabiliriz. (3 sql sorgusu yerine tek sorgu yazmak gibi…)
Biz bu tekniği http://www.enuygun.com da kullanıyoruz ve gerçekten efektif bir yöntem. Güzel anlatılmış elinize sağlık
Kullanmanıza çok sevindim.
Teşekkür ederim.
tskler..
verdiğiniz bilgiler için çok ama çok teşekkür ederim. artık sıkı bir takipçiniz olmaya karar verdim