Emre Macit
ABOUT THE AUTHOR

Emre Macit

Ideasoft yazılım departmanı ve Ar-ge sorumlusu. Matematik mühendisi. İnternet üzerine, yazılım ve koda dair her şey hakkında araştırma yapmayı ve bunları denemeyi seviyor. Yazılıma dair yazılar ağırlıklı olmakla birlikte arama motorları, sosyal medya ve teknolojiyle ilgili diğer konularda da yazılar yazıyor. Bazı konular için vakit bulamamaktan şikayetçi..

apache mod_rewrite ile URL yeniden yazma

Bir çok web yazılımcısı, URL’den doğrudan kullanmış olduğu değişkenleri, veya çalışma stilini, veya istemediği dosyalara erişimi kısıtlamak ister. Ya da sadece Arama motoru optimizasyonu (SEO) için geliştirme yapmak ister. Nitekim Apache’nin sunduğu mod_rewrite modülü ile URL’lerin tekrardan işlenmesi mümkün. Nasıl mı?

Örneğin sitenizin adresi www.deneme.com olsun.
www.deneme.com/test.php?lang=tr&limit=100&action=list şeklinde bir URL niz var. Bu URL’nin sonucu olarak da sitede türkçe dilinde 100 adet şarkı listelenmiş olsa bütün değişkenlerimiz apaçık ortada her an değiştirilmeye veya kurcalanmaya hazır beklemiş olurlar.
Bu URL’yi mod_rewrite ile www.deneme.com/tr/100/list şeklinde değiştirebiliriz. Ya da başka bir kural belirleriz buna göre yeniden oluştururuz.
Bir arama motorunun bu sayfa ile ilgili düşünceleri pek de iç açıcı olmayabilir. Sebebi Url’de içerik ile ilgili bir şeyin olmaması.

Url şöyle olursa şık olur :
www.deneme.com/gunumuzun_en_iyi_100_türkçe_sarkisi-100_tr_list.html
Böyle olduğunda sondaki .html tamamen yalancı bir ek, 100_tr_list kısmında aslında değişkenlerimizi göndermiş oluyoruz, ondan önceki kısımda ise arama motorlarıın aradığı şeyi bulduğu hakkında bilgisini kuvvetlendirmiş oluyoruz. URL de ve sitede aynı içeriği bulması, sizin arma sonuçlarında bir miktar dha yukarlarda olmanıza imkan verebilir.

Kullanıcmı :

  • Apache de mod_rewrite modülünü açmanız gerekiyor. (httpd.conf içinde genellikle önünde # işareti ile comment’lenmiş oluyor)
  • httpd.conf içerisinde ilgili web klasörünüz için ayarlarda .htaccess in kullanımının açılması gerekiyor.   AllowOverride all diyerek açılıyor. (Daha fazla detay için lütfen apache allowoverride seçenekleri)
  • belirtilen sitenizin index.php sinin yanına .htaccess dosyası oluşturulması gerekiyor. Bu dosya RewriteEngine on  (yeniden yazma motorunu devreye alır)RewriteCond   %{REQUEST_URI} (yeniden yazma için regexp ifadesi (örn: .html yazarsanız .html gördüğü tüm durumlar yeniden yazma çalışır))
    RewriteRule  ([^/]+)-_-([^/]+)_([^/]+)(.html)/?$ (yönlenmesini istediğiniz sayfa. Burada $1 , $2 diye $ karakterinden önce gruplanmış kısmı değişken olarak kullanabilirsiniz. ) [L] (burada da çeşitli ifadeler ile yeniden yazma işleminin tekrarlanmasını, tekrarlanmamasını, vs.. gibi özelliklerini ayarlayabilirsiniz.)

Basit bir şekilde bir yeniden yazma işlemi şöyle olur.
RewriteEngine on
# aşağıdaki 2 satır request_uri nin içinde ahmet.html diye bir şey geçiyorsa, onu mehmet.html ye yönlendirir.
RewriteCond   %{REQUEST_URI} ahmet.html
RewriteRule  mehmet.html

RewriteRule Komutunu öğrenmiş olduğunuz için mutlu olabilirsiniz. Bununla birlikte rewriteCond ile sınırlarınızı bariz bir şekilde genişletebilirsiniz. Çünkü bu komut ile yapabileceklerinizin sınırı bariz bir şekilde artıyor. Yazılım diline yük olabilecek şeyleri, Server (Apache) tarafından kolayca halledebiliyorsunuz. RewriteCond bildiğimiz if manasına geliyor.

Komut şu şekilde çalışıyor :

RewriteCond String Condition
String bir server değişkeni olabilir veya düz string olabilir.
Condition (durum) kısmı bir regular expression deseni olabilir.
Aşağıdaki örnekte de remote_Addr değeri 123.45.67.89 olan (IP si bu olan) bir kişiye ne olursa olsun, engellendin.html gösterilmesini sağlayan kod bulunuyor.

RewriteCond %{REMOTE_ADDR} 123.45.67.89

RewriteRule .* engellendin.html [R]

Server değişkenlerinden en kullanışlılarını liste halinde vermek istiyorum (Bunlar örneğin ilki %{HTTP_USER_AGENT} şeklinde kullanılıyor) :

Not : Eğer Bu değişkenlerin içinde ne olduğunu bilmiyorsanız veya merak ediyorsanız, phpinfo() fonksiyonu ile bu değişkenleri görebilirsiniz. Keza aynı değişkenler php tarafından da kullanılamaktadır.

Putty 0.61 Çıktı

Putty SSH Telnet client’in yeni versiyonu çıktı. Çeşitli bug fixleri ve geliştirmeleri içeren yeni versiyonda, açıkçası ben pek bir değişiklik göremedim. (35 saniye içerisinde ne görebiliyorsam artık.. 🙂 )

Yine de buradan indiriniz, yenilik iyidir.

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Neden Zend Framework Kullanmalıyım?

Bir çok kişi hangi PHP framework’ünün daha iyi olduğu konusunda sorular sormaktadır. Başlangıç seviyesi için hangisi iyidir? Hangisi bir firmaya tam uyar? Bir arkadaşımızı veya patronumuzu Zend Framework kullanmaya nasıl ikna ederiz?

Bu makalede diğer frmaework’lerle kıyaslama yapmak yerine Zend Framework ile ilgili bilgi vereceğim.

Zend Framework , PHP nin kurucularından olduğundan bir kere, zaten işlerini ve ne yapacaklarını iyi bildiklerini düşünüyorum. Ki içine girdiğinizde bu daha da iyi anlaşılabiliyor. Ayrıca değinmem gereken bir nokta da Zend ile yapılmış bir çok örnek ve uygulama bulabiliyorsunuz internette.

Ayrı Kullanılabilirlik : Bu frameworkteki partiküller, sanki bir php library’siymiş gibi kullanılabiliyor. Örneğin sadece Form validator kullanmış olduğum bir uygulamam mevcut. Eğer sadece ihtiyaç Zend_Form_Validator ise bunu anında kullanım yapısına uyduran Zend Framework ile bu mümkün, çünkü bu bileşenler birbirinden imkan olduğunda çok güzel soyutlanarak ayrıştırılmış. Tabi ki yine de gereklilik duyulan bileşen olduğu zamanlar olabiliyor.

MVC Bileşenleri : Zend Framework Model-View-Controller ayrıştırmasını iyi yapmış bir frameworktür. Algoritmaları, kafa karıştırıcı şeyleri user interface meselesinden çok rahat ayırmanızı sağlar. USer interfaceini yapan kişiler de bir miktar kodlaam yetisi varsa ve Zend_Layout yapısını bilirse (şart değil)  tasarımda yazılımcı ihtiyacı devreden tamamen kalkabilir.

Dökümantasyon : 6 dilde 500 sayfadan büyük dökümantasyonu ile güzel bir arşiv oluşturulmuş durumda. Halen de eklenmektedir.

Destek: En iyi destek bir yazılımcı için tabi ki www.google.com’dur. İnanın google’ın birşeyler bulabilmesi için zend framework yazıp sonuçlara bakmanız bile yeterli olacaktır. Yaklaşık 7.440.000 sonuç bulundu (0,11 saniye))

symfony framework için bu  Yaklaşık 3.660.000 sonuç bulundu (0,18 saniye)

Zend Değerleri : Zend studio ve zend server gibi iki güçlü IDE (geliştirici araçları) Zend tarafından ücretsiz lisans ile verilebiliyor. Bu iki ürün de Zend framework ile uyumlu bir şekilde çalışıyor. Kod yazma kabiliyetinizi hızlandırıyor. (Günümüzde netbeans ile de bir çok kodsal işinizi halledebiliyorsunuz tabi ki bu ayrı. Ben her şeyi kendi özel editöründe yazmayı sevenlerdenim.. )

Ayrıca Zend google, amazon, ebay, vb gibi birçok güçlü partner ile resmi olarak çalışmaktadır. Bunları Zend framework ile de kullanabiliyorsunuz. hazır yazılmış classlar,  ve hata kontrolleri de içinde 🙂

Çokluk : Kendiniz yazmak yerine, Zend framework’te 64 bileşen zaten yazılı!. Bu sayı gitgide artıyor da. Bileşenlerden bazı önemlileri şunlar :

  • MVC – Zend_Application, Zend_Controller, Zend_View, Zend_Layout, Zend_Navigation
  • l10n and i18n – Zend_Locale, Zend_Date, Zend_Translate, Zend_Currency, Zend_Measure
  • JavaScript entegrasyonu /AJAX – Zend_Dojo, ZendX_JQuery
  • Web servisleri – Zend_Service_Yahoo, Zend_Gdata, Zend_Service_Amazon
  • Diğerleri – Zend_Acl, Zend_Auth, Zend_Mail, Zend_Pdf, Zend_Form, Zend_Search_Lucene, Zend_Validate, Zend_Tool, Zend_Test

Kalite : Zend framework kodun kalitesine odaklanır. İspatlanmış bir nesne yönelimli tasarım kalıplarını kullanır. Neredeyse tüm bileşenler extend edilebilir. (miras alınabilir)

Ne değildir? : Orta seviyeli bir yazılım olmadığından, uygulamanıza özellik eklemek için belirgin bir yol bulunmamaktadır. Bunun yerine araçlar ve yorumlar ile işi yapmanızı sağlar. İşi yapacak kişi ve kararları verecek kişi yine yazılım geliştiricidir. Bu yüzden Zend_Model diye bir bileşen yoktur. MVC deki M harfi modeli işaret eder, ve Model’i uygulamaya gömmek, sizin nasıl gömeceğiniz ile ilgilidir 🙂

 

Bu yazı bir çeviridir. Fakat okuduğumda bunları bu denli ifade edemeyeceğimi düşündüğümden, doğrudan çeviri yapmaya karar verdim.

Orjinal yazı : http://www.techchorus.net/reasons-use-zend-framework