Ya hep ya hiç : www kullanın veya kullanmayın

Dikkat: Bu yazının yazılma tarihinin üzerinden en az 60 gün geçmiş. İçerisindeki bilgiler güncelliğini yitirmiş olabilir. Yorumları ve güncellemeleri göz önünde bulundurarak yazıyı takip ediniz.
Günümüzde ajax, flash derken client side crossdomain istekler geziyor. Bunun gibi teknolojileri kullanan uygulamalarda sık karşılaştığımız bir sorun var. Mesela flash içinde, javascript dosyalarında veya php yönlendirmelerinde bir sürü yerde yönlendirme kullanıyoruz ve aslında farkında olmadığımız bir kullanımdan dolayı oturum, istek cevaplarının gelmemesi gibi hatalar alıyoruz. Farkında olmadığımız şey şu :

Siz uygulamanızı yazıyorsunuz, flash'da actionscript yazan arkadaş veya sizhttp://www.mfyz.com/kaydet.php gibi bir adrese çağrı yapıyor. Veya bir işlem sonucundahttp://www.mfyz.com/tesekkur.php adresine yönlendiriyor. Diyelim ki uygulamanızda oturuma birşeyler kaydettiniz, cookie yazdınız vs, ve kullanıcıhttp://www.mfyz.com yerinehttp://mfyz.com adresinden girdiği zaman sizin uygulamanızda kaydedilen oturum veya cookie'ler mfyz.com domaini için yazılıyor. Sonra uygulama içindeki yönlendirme www.mfyz.com altında bir dosyaya yönleniyor. Sonuç olarak oradaki kontrollerde "www.mfyz.com" altındaki çerezler ve oturumda değişkenler arandığı için uygulamanız hiç oturum açılmamış gibi çalışıyor.

Bir başka sorun da flash ve ajax istekler için eğer domain uyuşmaz ise tarayıcıların bu istekleri kabul etmeyeceğidir. Ajax'ta DOM hataları alırsınız (eğer firebug kullnıyorsanız görürsünüz), eğer flash'tan istek yaparsanız cevap alamazsınız çünkü flash önce o domain altındaki crossdomain.xml dosyasından sizin o domaine erişiminiz olup olmadığını denetler. Eğer bu tanımı yapmadıysanız uygulamanız çalışmaz.
Aslında www.mfyz.com ile mfyz.com aynı domain ve siteler olmasına rağmen xss gibi güvenlik nedenleri için tarayıcılar tarafından engellenmektedir.

Çözüm, giren kullanıcınızı tek yerde gezdirmektir. Yani önce sitenizi www'lu mu yoksa www'suz mu kullanacağınıza karar verip gelen ziyaretçiyi eğer www'lu ise veya www'suz ise doğru olan yere yönlendirmektir. Ziyaretçi açısından birşey değişmez, hatta hissetmez bile, ama siz uygulama geliştirirken belki haftalarca hatanın kaynağını çözemeyeceğiniz bir problemle uğraşıyor olabilirsiniz.

PHP ile bu yönlendirmeyi yapmak için aşağıdaki kodu kullanabilirsiniz.
// subdomain redirection
if( substr($_SERVER[HTTP_HOST], 0, 3) != 'www' ){
	die('<script type="text/javascript" charset="utf-8"> window.top.location = "http://www.mfyz.com'. $_SERVER[REQUEST_URI] .'"; </script>');
}
Bu kodhttp://mfyz.com şeklinde gelen kullanıcıyıhttp://www.mfyz.com altındaki gideceği yere yönlendirir. Yani site her zaman www'lu çalışır. Bunun tersini yani www'suz çalışmak istiyorsanız (mfyz.com'da olduğu gibi) aşağıdaki versiyonu kullanabilirsiniz.
// subdomain redirection
if( substr($_SERVER[HTTP_HOST], 0, 3) == 'www' ){
	die('<script type="text/javascript" charset="utf-8"> window.top.location = "http://mfyz.com'. $_SERVER[REQUEST_URI] .'"; </script>');
}
Bu teknik aynı zamanda domain'in markalaşması konusunda da psikolojik açıdan bir alışkanlık oluşturma konusundaki ince bir detaydır.

Hazırlayan : Mehmet Fatih YILDIZ

Yorumlar

Üye Resmi Ozan İlbey Yılmaz
22 Kasım Pazar ´09 01:51
Özellikle de yazının son cümlesinde belirtilen durum pek dikkat edilmeyen fakat önem verilmesi gereken bir durum.
Üye Resmi Özgür Bozkurt
28 Kasım Cumartesi ´09 15:17
Ben www kullanarak çalışıyorum. Fakat bunu htaccess ile kolay bir şekilde halledebiliyoruz   :-D

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.siteadresiniz\.com
RewriteRule (.*)http://www.siteadresiniz.com/$1 [R=301,L]

Böylece PHP yi yormamış oluyoruz   :-D
20 Mart Cumartesi ´10 16:06
@Özgür Bozkurt

Makalenin tamamını okumadığın kesin.
.htacces ile yaptığımızda mesela bir SMF forumda giriş yapmamış gibi gösteriyor. Bunun tam olarak çözümü Mehmet abinin verdiği kodda var.
Üye Resmi Özgür Bozkurt
16 Haziran Çarşamba ´10 09:55
@Akardas
Alakası yok. Js yönlendirme yerine ht. ile yönlendiririm. Js yönlendirme cookieleri ne zamandan beri taşıyor ?
16 Haziran Çarşamba ´10 14:23
Teşekkür ederim mfyz hocam, ben de web sitem için artık www kullanmıyorum. Kullananları da www OLMAYAN adrese yönlendiriyorum. Google de farklı farklı indexliyordu sitemi. Artık hepsini hhlinks.com olarak indexleyecek inşAllah. Tekrar teşekkür ederim.
Üye Resmi Ahmet Kayar
18 Ekim Pazartesi ´10 12:48
Vermiş olduğunuz bilgiler için çok teşekkür ederim. Bu sorun bir kaç gündür çözememiştim bende htaccess yönlendirmesi başka site çalışmalarımda kullanmıştım ancak oturum açma ve cookie de sorun yaşayacağımı sanmıyordum tekrar vermiş olduğunuz bilgiler için çok teşkkür ederim
Üye Resmi yedincisenol
24 Mart Perşembe ´11 22:15
Teşekkürler.
Üye Resmi Adam yapıyor hacı
20 Haziran Çarşamba ´12 07:16
Yahu önemli olan .htaccessten yapmak
20 Haziran Çarşamba ´12 07:24
Surada htaccess ile ayni seyi nasil yapabilecegini bulabilirsin:http://mfyz.com/gunluk/303/
Üye Resmi Yıldırım Erdemli
20 Eylül Salı ´16 06:09
Merhabalar,

Her iki kodu da biraz daha düzenlemek gerekiyor.

www ön ekini kaldıran kod çalışıyor fakat eğer alan adı www ile başlarsa - çok düşük bir ihtimal ama - hata veriyor.

www'li hâle getiren kod ise - denemedim ama - aynı kod üzerinde hem ana site hem de alt alan adları birlikte çalışıyorsa alt alan çağrıldığında alt alanın önüne bir de www ekleyecek gibi görünüyor.

Şöyle nasıl olur diyebilmek için (çiçeği burnunda bir php kodlayıcıyım) deneme yaptım fakat $_SERVER['HTTP_REFERER'] ile kontrol ettiğimde, adres satırında www kalktığı hâlde $_SERVER['HTTP_REFERER']http://www. şeklinde sonuç döndürüyor.

Bunun sebebi nedir, yanlış yaptığım bir şey mi var?
Bahsettiğim işlemleri nasıl yapabiliriz?
Üye Resmi Yıldırım Erdemli
20 Eylül Salı ´16 06:18
Tekrar Merhaba,

if( substr($_SERVER[HTTP_HOST], 0, 4) == 'www.' ) şeklinde kontrol edersek sorun giderebiliriz, doğru mu?
Yeni Yorum *
İletişim Bilgileri
*
*
E-Posta adresiniz gösterilmeyecektir.
(unut)
Güvenlik Kodu *

Gönderiliyor