Merhaba, internet siteleri para kazandırmaya başladığından beri, site sahipleri daha çok para kazanmak için daha çok ziyaretçi kazanmaya çalışıyor. Bunun en kolay yöntemi ise arama motorlarının huyuna gitmek.
Apache web sunucusunun özelliği olan mod_rewrite ile adres satırlarımızı kodlama dilinin değişkenlerinden arındırıp siteadı.com/yazi/Yazi_Basligi şeklinde yayınlayabiliyoruz. Tabi bunu yapmak için popüler olan yol regex değerleri ile enteresan bir htaccess dosyası oluşturmak. Örnek:
|
|
Eğer benim gibi regex yazmaktan pek haz almıyorsanız ve adres satırını ayrıştırma işini kodlama dilinin yapmasından rahatsız olmayacaksanız adres satırından gelen tüm değişkenleri bir php dosyasına gönderip, işlemlerin ayrıştırılmasını burada yapabilirsiniz.
.htaccess
|
|
Bu sayede adres satırından gelen tüm değişkenleri index.php dosyamıza $_Get metodu ile url değişkeninde gönderiyoruz.
index.php de bu değişkeni alıp ayrıştırmak için ise
index.php
|
|
http://siteadi.com/blog/yazi/tarih
ÅŸeklinde bir istek geldiÄŸi zaman
$url[0] = blog
$url[1] = yazi
$url[2] = tarih
değerlerini alacaktır.
Üşengeç php'ciler için en kolay adres ayrıştırma methodu :)
Konuyla ilgili microsoft platformu yazılımcıları için aşağıdaki bağlantı faydalı olabilir:
http://blogs.iis.net/ruslany/archive/2008/11/10/url-rewrite-module-release-to-web.aspx
Eğer Django ile uğraşanlar varsa bu özelliğin ön tanımlı olarak gerldiğini görmüşlerdir. Regex kasmadan url leri temiz bir biçimde yayınlama imkanı veriyor. Django denemenizi tavsiye ederim.
django, pyhton için hazırlanmış bir web framework. benzer şekilde php için hazırlanmış frameworklerden cakephp, sympfony ve code igniter'da da mod_rewrite ile gelişmiş yönlendirme seçenekleri mevcut.
explode() kullanılarak bölümlenmiş array ve daha sonra bunun kontrolü ile php çağırma en hantal yöntem.
bu kodlama küçük veya orta ölçekli sitelerde ilgi görsede bu kadar basit yöntem geniş hitli ve geniş içerikli sitede ağırlaşmaya ve cpu değerinin yükselmesine neden olacaktır.
En mantıklısı htaccess ile ilk gösterdiğin örnek.
bu kodlama küçük veya orta ölçekli sitelerde ilgi görsede bu kadar basit yöntem geniş hitli ve geniş içerikli sitede ağırlaşmaya ve cpu değerinin yükselmesine neden olacaktır.
web sunucularini cok hafife aliyoruz gibi geldi. bir string'i explode() ile bolmek CPU'yu zorlamaz. genis hitli bir site olsa bile, gozle gorulur bir fark olur mu emin degilim.
genis hitli bir site olsa bile, gozle gorulur bir fark olur mu emin degilim.
Olmaz :)
Zaten direk olarak aynı olmasa da CakePHP ve Zend FW de benzer yöntemler ile adres satırını okumaktalar.
Regex yöntemi performans açısından işi php 'ye ulaşmadan yaptığı için daha performanslı görünebilir ancak her durum için ayrı ayrı .htaccess satırı oluşturmak biraz sıkıcı ve kullanışsız bir iş.
hostgator geçen hafta sunucularını güncelleyerek apache2 'ye geçmiş (?) , ve bu geçişin ardından yukarıda yazılan htaccess kodunu kabul etmemeye başladı. Adres index.php?url=blog/12 şeklinde görünüyordu. Kodu değiştirerek sorunu çözdük.
Eski Kod :
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=$1 [QSA,L]
Yeni Kod :
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=$1 [L]
apache2 de benzer problemler yaÅŸayanlara duyurulur.
benim kullandigim hostlarda htaccess dosyasi işe yaramıyor bunun icin index.php? gibi bir parametre eklemek zorunda kaliyorum ve adres satirida
www.siteadi.com/index.php/kategori/yazi-adi seklinde oluyor bunu htaccess olmadan halletmenin bir yolu yokmu?
.net icin ayrıca framework 3.5'den itibaren system.web.routing de kullanılabilir, asp.net'in mvc yapısı ile birlikte geliyor:
http://chriscavanagh.wordpress.com/2008/03/11/aspnet-routing-goodbye-url-rewriting/
apache de .htaccess kullanmak zorundasın
ııs de 404.php oluşturup içine yazman gerekir
ama en iyisi nginx ,nginx 'de php seo işlemi gayet rahat conf dosyasına bir modul ekleniyor gidip htaccess yada iis de 404.php oluşturmaya gerek yok . nginx wordpress kullanıcıları için öneririm
nginx için rewriterule yontemi;
if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; }if (!-d $request_filename) { rewrite ^(.*)$ /index.php?q=$1 last; break; }
if ($http_cookie ~* "id=([^;]+)(?:;|$)" ) { set $id $1; }
benim kullandigim hostlarda htaccess dosyasi işe yaramıyor bunun icin index.php? gibi bir parametre eklemek zorunda kaliyorum ve adres satirida
www.siteadi.com/index.php/kategori/yazi-adi seklinde oluyor bunu htaccess olmadan halletmenin bir yolu yokmu?
Sanırım IIS üzerinde php kullanıyorsunuz, pek sağlıklı değil, yüksek güvenlik ve performans için tercihen linux işletim sisteminde çalışan bir apache sunucuya terfi etmenizi tavsiye ederim.
.htaccess olmadan
siteadi.com/?/yazi/blog
şeklinde kullanabilirsiniz. arada fazladan /? olacaktır.
|
|
şeklinde php dosyanıza eklerseniz, $url[1] = yazi , $url[2] = blog olacaktır.
Dikkat ederseniz, yazı daki örnekde dizi 0 dan başladı ancak bu örnekte ilk değer boş olduğu için dolu değerler 1 den başlıyor.
.htacces uzerinde regular expression'lari apartirsaniz performans kaybiniz daha yuksek olacaktir. Ve de mod_rewrite aktif iken apache'nin her dizinde .htaccess dosyasina bakiyor olmasini da goz ardi etmemelisiniz.
bu nedenle reg. exp.'lari php ile handle etmek daha mantikli gorunuyor.
ama yazida verilen rewrite condition'larinda
RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f
satirlarinin "dosya sisteminde varolan dosyalari yonlendir-me" anlamina geldigini gozden kacirmamaniz gerekiyor.
@Yns olabilir ama ben sadece bir deneyimimi paylaştım 2 miilyon a yakın verisi, 90k hiti olan bir sitede ciddi anlamda kasma yaşanıyordu aynı sistemi htaccess ile tekrar elle yazarak tüm sorun çözüldü ben burdan yola çıkarak söylemiştim.
Arkadaşlar eğer iyi bir yazılımcı olmak istiyorsanız tüm işlemlerin en hızlısını öğrenmek zorundasınız. Bu değişmez. Yüksek hitli bir site yazmayı hayal ediyorsanız ve serverların bunu kaldıracağını düşünüyorsanız evet kaldırır ama anlık 10k trafiği olan bir site için ödeyeceğiniz rakam 10kata kadar artacaktır bunu unutmamalısınız.
anlık 10k kullanıcı aynı anda 1 işlem yapsa ve herbirinin işlemi 0.001sn daha uzun sürse yazdığınız kodlardan bu 10000*0.001 dersek 10sn de bi sayfanın üretileceği anlamına gelir ki bu durumda işi profesyonel yapıyorsanız kaybettiniz demektir :)
İnternet üzerinde hız testleriyle ilgili bolca ing döküman mevcut kısa zaman sonra buradan türkçe olarak paylaşıcam bende.
Sağlıcakla kalın..
@PalMayL
Siteleri de C ile kodlayalım o zaman, o da muhtemelen işlem başına 0.0001 sn kazandırır bize. Az kod yazmak, hazır kütüphaneler filan hiç yararlanmayalım ?
django'da dinamik bir şekilde getirmek istiyorsan url'leri, eninde sonunda regex kullanıyorsun. regex olmadan düşünemiyorum clean url muabbetini.
artik internet baglantilari yeterince hizli. web sunuculari ciddi derecede guzel performanslar veriyor.
ne _idugu_ belirsiz ortamlarda test edilmis guvenilmez testlerin verdigi milisaniyelik farklarla insanlarin "hayir o kod olmaz!" tarzi konusmalari bana sacma geliyor.
hiz artik gunumuzde eskisi kadar belirleyici bir faktor degil. performansi dusurdugu bilinen belli hatalari yapmadiktan sonra her teknoloji yeterince hizli.
duruma gore degisir bence, ornegin saniyede 20 kere hit alan bir sayfa icin standart bir framework kullanimi fazlasiyla yetipte artarken, saniyede 300-500 hit alan bir api cagrisi varsa, o zaman gerekirse c dede yazilabilir. tabii ne kadar metale yakin olunursa o kadar yonetilmesi zor kodun ortaya cikacagida unutulmamali, genisletilebilirlik, yonetilebilirlik gibi kelimelerden o kadar uzaklasiyor cunku.
tek bir dogru yok aslinda, belli sinirlar var, ornegin sistemi hizlandirmak icin ayda 100$ - 200$ verip yeni makine ilave etmek, ilk baslarda programci maliyetinden cok daha ucuza geliyor, ama 20-30 makineden sonra yonetim maliyetleri isin icine girmeye basliyor, yada bazen yeni makine ilave etmek hiz sorununu cozmemeye basliyor, farkli cozumlere gecmek gerekiyor. ornegin veritabaninda 10-20milyon satir olunca, indexler duzgun olsada veritabani clusteri kurtaramayabiliyor binen yuku, sharding yada baska bir yapiya gecmek gerekiyor.
tikanma noktalari var kisaca, bu noktalara gelince takla atmaya baslamak gerekiyor. ama o noktalara gelene kadar milisaniyelik farklar cok anlamli degil bence, derli toplu bir framework kullanilan, belli kurallarada sadik kalinan applikasyonlar fazlasiyla hizli zaten.
Sanırım IIS üzerinde php kullanıyorsunuz, pek sağlıklı değil, yüksek güvenlik ve performans için tercihen linux işletim sisteminde çalışan bir apache sunucuya terfi etmenizi tavsiye ederim..htaccess olmadan
siteadi.com/?/yazi/blog
aslinda kullandigim hostlar liunux hosting, ama yinede hicbirinde htaccess dosyasi iÅŸlevini yerine getirmiyor belki hosting yoneticilerinin birseyler yapmasi lazimdir ama aldigim linux+php+mysql hositnglerde htaccess in calistigini gormedim o yuzden hep index.php?/ gibi kullanmak zorunda kaldim
"siteadı.com/yazi/Yazi_Basligi" gibi kısa bir metnin explode() ile dizine aktarılması yüksek trafikli sitelerde her seferinde htaccess in kontrol edilmesinden daha performanslı olacağını düşünüyorum. Sonuçta gerektiği yerde kontrol edilecek her istekte değil. htaccess şiştikçe performansta düşecektir..
Bayzett htaccess nasıl şişiyor?
tashtan o sunucudan kaynaklanıyor mod_rewrite açık mı sor onu istersen?
turuncum peki mod_rewrite açık olup olmaması yine hostla alakali degilmi bunu kime soracagim yine hosting firmasina degilmi?
kodla bir yerden yapiliyorsa yapalim ki sanırım hosttaki webserver ayarlariyla alakalidir.
eğer .htaccess dosyası oluşturduysanız ve çalışmıyorsa ve apache sunucusunda olduğunuza eminseniz, host yetkilisine danışacaksınız.
tashtan evet sunucunu kim kontrol ediyorsa söyle açsın (tabii ki linux server olması şart).
yapacağı 2dk lık işlem bence iletmelisin
Merhaba arkadaÅŸlar,
Temiz url,SEO vb çok meşgul etmesin sizi. Evet yapınca güzel duruyor ama Google için artık bunlara gerek yok. Düzgün bir site harıtasını Google'e iletirseniz işin %90'ının halletmişsiniz demektir. URL'ler parametrik olsada Google nokta atışı yapabiliyor.
Örnek: Google.com.tr'de anafen altunizade yazın nasilbir.com, nasilbirokul.com siteleri Anafen'in kendi sitesinden hemen sonra geliyor.
Daha rekabetçi bir sonuç isterseniz tırnak içinde "anafen altunizade" şeklinde aratın.
Sonuçları görünce şunu anlayacaksınız : URL'nin güzeli değil sizin site yöneticisi olarak işleviniz önemli.
Bu arada Nasilbir.com site haritasını nasilbir.com/sitemap.php adresinden inceleyebilirsiniz. Bir sitemap generator program tarafından oluşturulmuyor. Teknik ekip hangi kayıtların indexlenmesini istiyorsa onlar sitemap'da tutuluyor.
@gCg aynen öyle eğer yukarıda anlattığım gibi hit alan sitelerin varsa gerekirse baştan C ile yazacaksın olmadı assembly ile bile yazabilirsin. Framework ler hazır işler için 1e 1 dir. Ancak programlama alt yapısını bilen ve üşenmeyen hiç kimse framework kullanmaz ihtiyaç duymadığı sürece zaten kendi frame worklerini kendi ihtiyaçlarına göre yaratmışlardır.
Sizde başkaları için bir site hazırlıyorsanız tabiki framework kullanın bende kullanıyorum bazı zamanlarda fakat en iyi sonucu almak için ayrıntıları öğrenmelisiniz ve kendinize framework oluşturmalısınız.
Bu bir bakış açısıdır, çok fazla tartışmaya girmeyeceğim ancak Amerika'yı da baştan keşfetme sevdasından da biraz uzak durmak gerekmekte.
Size göre site hiti arttıkça paso kodlama methodu değiştirip ms kazanmak doğru, bana göre fazladan makina ekleyip kodlama da uğraşacağım zamanın çok daha azını harcayarak çok daha performans kazanmak doğru
birde türkçe karakterler kullanılarak utf8 ile wikipediada urller ş,ö,ç gibi harfleri içerebiliyor onu nasıl yapıyorlar bir hal-ı intibası olan var mı ? bilen var mı?
Selam..
Bir Sorunla Karşılaştım ve Bana Oldukça ilginç Geldi..
.htaccess
ilse Adresleri
http://siteadi.com/blog/yazi/tarih
Åžekline Getirdim..
"/" işaretine Göre PHP de Ayırıp Tek Tek Sayfaya da Yazdırabiliyorum..
Yani Adres Çubuğundan Alıp PHP ye Gönderip Parçalamaları Yapıyor..
0 = blog
1 = yazi
2 = tarih
Şeklinde Parçalıyor Sorunsuz..
Fakat;
Adres
http://siteadi.com/blog
Şekindeyken Site Gayet Düzgün Çalışıyorken,
Nedense Bir Tane "/" işareti Geldiğinde CSS Dosyaları Çalışmıyor..
http://siteadi.com/blog/
Dendiğinde CSS Dosyaları Çalışmıyor..
Hem ie de hemde FF dede Aynı Sorun Var Browser dan da Kaynaklanmıyor :S Aklıma Mantıklı Bi Nedeni Gelmedi..
Bi Fikri Olan Var mı ?
"/" işareti Gelince Çalışmıyor ama "/" İşareti Yerine Başka Bir işaret Gelirse Sorun Yok..
"/" işaretinde de Sorunsuz Çalışması için Ne Yapmam Lazım ?
mantığı pek anlıyamadım ... peki;
http://www.siteadi.com/v4/?dil=tr&sayfa=cxc
adresini nasıl
http://www.siteadi.com/tr/cxc
şeklinde dönüştürebiliriz?
asp iis6.0'da 404 hatasını yönlendirerek yapabilirsin mesela :))
@MantuS Vanth: o sorunun sebebi css, js ve imajlar relative path ile verilmiş. Yani atıyorum src="style.css dediğin zaman /blog klasörü altında bir style.css dosyası arar tarayıcılar. Bu sorunu engellemek için css, js ve imaj dosyalarının başına / koyabilirsin. Misal css klasörü altında style.css dosyan olduğunu var sayıyorum ve style.css içinde de imajlara images klasörü altından çağırıyorsan css dosyanı src="/css/style.css" şeklinde çağırıp, imajları da images klasörü altından src="/images/bg.jpg" şeklinde çağırman gerekiyor.
@cxc: normal şartlar altında sen
$dil = $_get['dil'];
$sayfa = $_get['sayfa'];
şeklinde kullanıyorsun. Eğer yukarıdaki methodu deneyip, htaccess dosyanı oluşturup, adres satırını alıp parçalayan $url değişkenini de php kodlarına yerleştirirsen artık
$dil = $url[0];
$sayfa = $url[1];
ÅŸeklinde rahat rahat kullanmaya baÅŸlayabilirsin.
@gCg : Dediğini Yaptım ama Malesef Olmadı.. Hatta CSS leri Hiç Görmemeye Başladı.. :(
Klasör yapın benim ön gördüğüm şekilde olmayabilir, kendine göre modifiye etmen gerekiyor olabilir.
.htaccess dosyanı, index.php ni ve bunlara bağlı olan css dosyalarını ve imajları koyduğun klasör yapısını tam olarak paylaşabilirsen daha net bir şekilde yardımcı olabilirim.
Geç Cevap Verdiğim için Kusura Bakmayın..
.htaccess Yapım Şu Şekilde ;
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ index.php?qst_all=$1 [L]
$qst = explode("/", strtolower($_GET['qst_all']));
@import 'MantuS_Vanth/css/reset.css';
src Kısımının Başına / Desemde Olmuyor..
Fakat "/" Karakteri Yerine BaÅŸka Karakter DenediÄŸimde Sorun Yok :)
klasör yapısını da paylaşman gerekiyor doğru cevap verebilmem için.
Klasör Yapısı Derken ?
| index.php|- MantuS_Vanth
| |- css
| | | reset.css
| | | default.css
| | | ..cssler..
| |- jss
| | | jquery.js
| | | ..javascriptler..
| |- incs
| | | header.php
| | | footer.php
| | | ..include ettiklerim..
| |- pages
| | | homepage.php
| | | blog.php
| | | ..modullerim..
root da index.php Var Geri Kalanlar MantuS_Vanth Klasörünün içinde Türlerine Göre Klasörlenmiş Haldeler..
pillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.
Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.