mod_rewrite sayesinde sayfalarımızın adreslerini istediğimiz formda gösterebiliyoruz (İlgili makale için:http://mfyz.com/htaccess-yardimiyla-tum-trafigi-te......n-yonetmek). Kullanımı çok yaygınlaşsa da bu kullanımın bazı ufak problemleri beraberinde getirdiği göz önünde bulundurulmalı.

Bu yazıda iki çok açık problemden ve basit çözümlerinden bahsedeceğim.

İlk problemlerden birisi sayfanızda kullandığınız tüm medya veya eklentilerin yollarını domain seviyesinden belirtmek durumunda olmanızdır. Eğer htmlinizi yazarken sayfanızdaki görselleri, stilleri, scriptleri bu şekilde tanımlamadıysanız tüm sayfalarınızdaki yolları güncellemeniz gerekiyor.

Basit bir örnekle, ana dizinde duran bir index.php veya html dosyanızın olduğunuz varsayalım ve images, css ve js olarak 3 medya dizininiz olsun. html'inizi kodlarken yolları su şekilde belirtmeniz dogal:
<html>
	<head>
		<title>Blah blah</title>
		<link rel="stylesheet" href="css/style.css" />
		<script src="js/myscript.js"></script>
	</head>
	<body>
		<div>
			<h1>Test page</h1>
			
			<img src="images/cat.jpg" alt="Cat" />
		</div>
	</body>
</html>
Eğer bu uygulmanızda bu sayfayı sunan kodu domain.com/about/license gibi, birden fazla derinlikte bir url ile sunduğunuz zaman, tarayıcınız o sayfa kodunun /about/ dizininde çalıştığını varsayarak medya dosyalarınızı /about/js/, /about/images/ gibi dizinlerde arayacaktır.

Çözümü ise basit. İki seçeneğiniz var bu noktada. Her medya yolunu belirtirkenhttp://domain/images/cat.jpg şeklinde tam yolu belirtebilirsiniz veya dosya/dizin yollarını belirtirken "/" işareti ile başlayarak domain seviyesinden itibaren işaret edeceksiniz yollarınızı yani yukarıdaki html kodunda her yol tanımlamasını "/" işareti ile başlayarak (ekleyerek) düzeltebilirsiniz.

Başında bir protokol ile belirtilmemiş her url domain üstündeki bir yolu ifade eder. "/" işareti ile başlayan yollar ise domain seviyesini işaret eder. Yani sadece "/" şeklinde tanımlanmış bir link aslında domain ana dizinini işaret eder. Ama bizim amacımız domain seviyesinden itibaren bir dizini işaretlemek, dolayısıyla /images/icons/plus.png gibi bir yol sızı nerede olursanız olur her zamanhttp://domain.com/images/icons/plus.png'yi işaret ederek istediğiniz dosyaya ulaştıracaktır.

Cookie Problemi

Bir diğer problem ise çerez (cookie) problemidir. Çerezlerin tarayıcıda kaydedildiğini hatırlamakta fayda var. Sunucu tarafında dahi çerez kaydetmek isteseniz o çerez aslında o isteğin cevabında gelen headerlar'da olacak ve tarayıcı istek cevabındaki değerlere göre çerezleri kaydedecek, silecek veya güncelleyecektir. Yani tarayıcının çerezleri yönettiğini bilmeniz gerekiyor, ayrıca çerezlerin dizin bağımlı olduklarını da belirtmek gerek. Yani bir çerezi /A/B/C dizininde iken ayarlarsanız bu çerez sadece C dizini ve alt dizinlerinden erişilebilir olacaktır. C dizinindeyken aryıca ana dizin, A ve B dizininde kaydedilmiş çerezlere de erişebilirsiniz. Tarayıcı, alt dizinlerdeki bir çereze erişimi bir üst dizinden veya paraleldeki bir dizinden vermez.

Bu durumda url'lerinizi klasör şeklinde ayarladıktan sonra uygulamanızda nerelerde çerez kaydediyor, siliyor veya güncelliyor olduğunuzu hatırlamanız ve güncellemeniz gerekiyor. Bu güncellemeyi hem javascript'deki cookie kullanımınız için hem de sunucu tarafındaki çerez kullanımınız için güncellemeniz gerekiyor. Sunucu tarafında bütün dillerde çok bilinen bir problem olduğu için yazdığınız sunucu taraflı dile ilişkin çerez methodlarını inceleyin. Ben kısaca php'de nasıl yapacağınızı anlatacağım.

Önce javascript ile çerez işlemlerinizi güncellemek için, normalde kullandığınız:
document.cookie = "";
koduna ek olarak "path=/" eklemeniz gerekecektir (tabi ki ; ayracını kullanarak diğer çerez cümlenize ekleyebilirsiniz.

Bu size karışık gelmiş olabilir çünkü javascript ile çerez yönetimini herhangi bir kütüphane kullanmadan yapmanın yolu bu. Ancak muhtemelen jquery veya en azından çerezlerinizi okumak, silmek veya kaydetmek için bir kütüpahne kullanıyor iseniz kullandığınız kütüpahenin "path" yani çerez dizinini belirtebileceğiniz bir yöntemi vardır, bu yöntemi uygulayarak tüm çerezlerinizi ana dizininizde ayarlamalısınız, böylece çerezleriniz her yerden erişilebilir hale geleceklerdir.

PHP'de bu problemi çözmek için tüm "setcookie" fonksiyonunun (name, value, expire) standart kullanımına 4. parametre olarak "/" yani dizin parametresi eklemeniz yeterli olacaktır. Bu noktadan sonra kaydettiğiniz tüm çerezler ana dizine kaydedilecek, böylece her yerden erişilebilir hale geleceklerdir.


Bu konu, daha teknik noktalarda başka problemleri de beraberinde getiriyor fakat url'lerinizi klasör şeklinde ayarladıktan sonra ilk karşılaşacağınız iki büyük problemden ve çözümünden kısaca bahsetmiş oldum.


Hazırlayan: Mehmet Fatih YILDIZ
Herhalde milyon tane baslik acilmis ve bu soru cevaplanmistir fakat su an duzenleme yaparken daha dogru bir cozum buldum bu konuya ve sizinle paylasmak istedim.

Web sitenizin adresindeki www'dan kurtulmak icin htaccess'da mod_rewrite'i kullanabilirsiniz. Bircok farkli cozum var fakat icinde domain, hostname degisikligi yapmadan her yerde kullanabileceginiz ve bence en dogru cozum olarak su kodu kullanabilirsiniz:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^.*$ http://%1%{REQUEST_URI} [R=301,L]
Not: otomatik link olustugu icin kod icindeki link ve ikona takilmayin, kodu kopyaladiginizda dogru kopyalanacaktir.


URL kısaltma servisleri şu an özellikle sosyal ağlarda otomasyonlarla fln çok fazla kullanılıyor. Uzun url'leri kısa url'lere çeviriyor fakat acaba arama motorlarının botları bu url'leri takip ederken gerçekten son yönlendirilen url'i mi hesaba katıyor?

Arama motorlarına göre dış bağlantı sayısı oldukça önemli bir kriter biliyorsunuz, ama kısa url'lerle aslında dışarıda kaç bağlantının geldiğini tam olarak sayamıyor oluyor botlar.

Belki de friendfeed veya twitter gibi servisler bunu engellemek için bu servisleri kullanıyorlardır. Mesela friendfeed ff.im domainini kullanıyor, yani kendi servisi ve public bir servis değil. Yani google'a göre friendfeed ile ff.im adresleri birbirlerini besliyor ama dışarı bağlantı vermiyorlar.

Tabi arama motoru botlarına bu konudaki problemin çözümünü öğretmek zor değil.
Soyal link sitelerini çoğumuz kullanır olduk. Delicious, google bookmarks, digg, technorati vs.
v0.7'de gördüğünüz gibi her sayfanın altında bu sitelerin ikonları var ve bu butonlar sayesinde gezindiğiniz sayfayı doğrudan o servise eklemek için istek gönderebiliyorsunuz. Bu butonları da çoğu sitede görmeye başladık. Bu dökümanda kısaca bu butonları koymanızı sağlayacak işlemlerden bahsedeceğim.

Neredeyse bütün sosyal link siteleri url kaydetme formlarını GET methodu ile gelen verilerle otomatik doldurabiliyor. Böylece hiçbir api veya benzeri zorlukla uğraşmadan dışarıdan istek kabul edebiliyorlar. Bu sayede buton haline dönüştürmek çok kolay.

Ben bu servislerin bağlantılarını
<span>Bu sayfayı "Sosyal Bağlantı" (Social Bookmarking) sitelerine kaydedin</span>
<ul>
  <li><a href="#" onClick="sayfayiImle('delicious');">del.icio.us</a></li>
  <li><a href="#" onClick="sayfayiImle('furl');">Furl</a></li>
  <li><a href="#" onClick="sayfayiImle('digg');">Digg</a></li>
  <li><a href="#" onClick="sayfayiImle('technorati');">Technorati</a></li>
  <li><a href="#" onClick="sayfayiImle('reddit');">Reddit</a></li>
  <li><a href="#" onClick="sayfayiImle('google');">Google Bookmarks</a></li>
  <li><a href="#" onClick="sayfayiImle('simpy');">Simpy</a></li>
</ul>
htlm kodu ile sayfamın altına yerleştirdim. Gördüğünüz gibi sadece kendi kimlikleri ile sayfayiImle fonksiyonunu cagiriyorlar. Javascript kodum da şu :
function sayfayiImle(servis){
  var servis, url;
  // sosyal link imleme url'leri (dinamik)
  if( servis == 'delicious' )
    url = 'http://del.icio.us/post?v=4;url=$URL;title=$TITLE';
  else if( servis == 'furl' )
   url = 'http://www.furl.net/savedialog.jsp?p=1&v=1&u=$URL&t=$TITLE';
  else if( servis == 'digg' )
    url = 'http://digg.com/submit?phase=2&url=$URL';
  else if( servis == 'technorati' )
    url = 'http://www.technorati.com/cosmos/search.html?url=$URL';
  else if( servis == 'reddit' )
    url = 'http://reddit.com/submit?url=$URL&title=$TITLE';
  else if( servis == 'google' )
    url = 'http://www.google.com/bookmarks/mark?op=add&bkmk=$URL&title=$TITLE';
  else if( servis == 'simpy' )
    url = 'http://www.simpy.com/simpy/LinkAdd.do?href=$URL&title=$TITLE';
  else return false;
  
  // sayfa basligi ve url'sinin entity'sini duzeltelim
  url = url.replace( '$TITLE', encodeURIComponent(document.title) );
  url = url.replace( '$URL',   encodeURIComponent(location.href)  );
  
  // olusturulmus url'ye gidelim
  location.href = url;
}
Burada her servisin bir url'si var ve her servis 2 parametre istiyor. Bunlar kaydetmek istediginiz sayfanın URL'si ve Başlığı URL'lerde dinamik olarak $URL ve $TITLE stringlerini sonradan değiştirmek üzere dinamik url cümleleri oluşturdum. Fonksiyonun ilk parametresine göre, yani hangi servise kaydedilecekse o servisin cümlesini alıp, $URL ve $TITLE stringlerini document.title ve document.url ile değiştirip oluşan son URL'ye yönlendirdim sayfaları.

Aslında yapılan iş çok basit, bunu dinamik olarak php'ye de yaptırıp statik linkler basabilirsiniz. Ama bu yöntem en pratik olanı :-) Burada kullanmadığım diğer servislerin de url kurallarını öğrenip bu listeye ekleyebilirsiniz. Zira sosyal link sitelerini sayısı oldukça fazla.

AddThis ve EkleBunu hizmetlerini kullanmak

Başka bir tercihiniz de var, AddThis (http://addthis.com/ ) veya Türkçe olarak EkleBunu (http://www.eklebunu.com/ ) hizmetlerini kullanmak. Bu sitelerde bulunan html kodunu ekleyerek sayfanıza bir buton koyuyorsunuz ve bu buton sayesinde tüm sosyal link sitelerine sayfanızı kaydedebilir hale geliyorsunuz. Butonlar :

AddThis

EkleBunu

şeklinde görünüyor sitenizde.


Hazırlayan : Mehmet Fatih YILDIZ

Popüler Etiketler

kontrol yapıları if while cms less css language development style social tool htaccess apache route router mod_rewrite php pear mdb2 prepare execute mysql mssql pgsql örnek kod firefox blog rss mfyz design compile nedir javascript js ios iphone ipad apple app store store in-app purchase purchase subscription verification storekit itunes connect itunes switch css3 twitter widget url windows istatistik sosyal medya ingilizce internet explorer api generator gimp lifestream dokuman iOS html form input textarea select www subdomain redirect crossdomain startups music wireless share jquery plugin optimization media screen wordpress statistics graph ubuntu ntfs fstab ie support browser macosx license imza signature mail google search ajax ruffles wanda facebook oyun cache workspace subversion svn howto nasıl regex coding date sql diff connect cookie assets spam integration service network xmlhttprequest download logo mootools laptop notebook doritos optimizasyon analyse procedure calendar xml mobile app banner chart grafik box kurulum konsol terminal ipucu radio button object linux login kampanya tytz digital internet table tebrik git version control deployment query injection developer pharma hack job ui ux icons open source lisans meta webkit web app xhtml portfolio opengraph fql html5 icon ikon auth http db database session insanlar seo newsletter osx player framework parse sitemap server proje bootstrap kitap link browsers compiler on-the-fly code editor ide phpstorm jetbrains zaman export tarih applications free