htaccess ile Mobil Ziyaretçilerin Mobil Sürüme Yönlendirilmesi
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYQnf3zg' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
Akıllı telefonların ve tabletlerin yaygınlaşması ile internetin mobil kullanımı büyük oranda arttı. İleride desktop ve laptopları tamamen bırakır mıyız bilmem ama mobil kullanımın giderek daha da artacağı aşikar gibi görünüyor.
Durum böyle olunca da artık hemen hemen her web sitesinin bir de mobil sürümü bulunuyor ve mobil cihazlardan gelen site görüntüleme istekleri user agent bilgisinden tespit edilerek otomatik olarak mobil sürüme yönlendiriliyor.
Bu yönlendirme işlemini yapmak için kullanılabilecek yöntemlerden pratik birisi de apache'nin mod_rewrite özelliği'ni kullanmak ve .htaccess içinde yönlendirme kuralları tanımlamaktır.
Yazının devamında çeşitli koşullara göre nasıl yönlendirme yapılabileceği ile ilgili detaylara değineceğim, ilginizi çekerse göz atmak isteyebilirsiniz.
İçerik İndexi
Gereksinimler
Yönlendirme işlemlerini yapabilmek için öncelikli olarak apache'nin mod_rewrite modülü devrede olması ve AllowOverride direktifinin “All” ya da en azından “Fileinfo” olarak set edilmiş olması gerekiyor. Bu işlemlerin nasıl yapılacağı ile ilgili olarak daha önce yayınladığım “htaccess ile Bakım Sayfasına Yönlendirme” isimli yazının “mod_rewrite” ve “AllowOverride Direktifi” isimli alt başlıklarına bakabilirsiniz.
Mobil Sürüme Yönlendirme İşlemi
Yönlendirme işlemleri için birden fazla senaryo olabilir; örnek olarak sitenin mobil sürümü, ilgili sitenin kök dizinide bulunan bir alt dizinden yayınlanıyorsa farklı; bir subdomain vasatısı ile ayrı bir VirtualHost altından yayınlanıyorsa farklı rewrite kuralı kullanılmalıdır.
Bu iki senaryo için tanımlamalar aşağıda anlatıldığı gibi olabilir:
Mobil Sürüm Altdizindeyse
Örnek olarak, sitenin mobil sürümü ilgili sitenin ana dizininde /mobile isimli klasörde duruyorsa ana dizinde bulunan .htaccess dosyasına şöyle bir giriş yapılabilir:
RewriteEngine On RewriteCond %{REQUEST_URI} !^/mobile.*$ RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC] RewriteRule ^(.*)$ /mobile%{REQUEST_URI} [L,R=302]
Böylece, user agent kısmında android, blackberry, iphone, vs. ibareleri geçen sayfa görüntüleme istekleri /mobile alt dizinine yönlendirilecektir.
Örneğin istek, http://www.syslogs.org/deneme url'sine gelmekteyse kullanıcı, http://www.syslogs.org/mobile/deneme adresine yönlendirilecektir. Ayrıca isteğin sürekli yönlendirilerek sonsuz döngüye girmemesi için yönlendirme, istenilen URL'de /mobile ibaresi geçmemesi durumunda yapılacaktır.
Mobil Sürüm Subdomain Altındaysa
Mobil sürümün örnek olarak “m.syslogs.org” gibi bir sub domaini varsa ve ayrı bir VirtualHost tanımlaması ile yayınlanıyorsa, normal sürümün kök dizininde bulunan .htaccess dosyasında aşağıdaki tanımlamalar girilebilir:
RewriteEngine On RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC] RewriteRule ^(.*)$ http://m.syslogs.org%{REQUEST_URI} [L,R=302]
Bu şekilde de user agent kısmında ilgili mobil cihazlara ait ibareler geçen istekler, http://m.syslogs.org/url adresine yönlendirilecektir.
Bu yönlendirme işlemlerinin yanı sıra, mobil sürüme yönlendirilmiş kullanıcılara normal sürümü görüntüleme şansı vermek de isteyebilirsiniz. Ancak yukarıdaki şekilde yapılan yönlendirmelerde ilgili mobil cihazlardan gelen istekler başka herhangi bir koşula bakılmaksızın mobil sürüme yönlendirildiklerinden dolayı bu şekliyle normal sürüme erişemezler. Bu problemi aşmak aşağıdaki gibi bir yöntem izlenebilir:
Geri Yönlendirme İşlemi
Mobil bir cihazdan sitenin mobil sürümüne erişmiş olan bir kullanıcıya aynı zamanda normal sürüme de erişebilme şansı vermek için izlenebilecek yöntemlerden birisi, mobil sürümden normal sürüme giden bir redirect linki vasıtası ile kullanıcıya bir cookie atamak ve .htaccess kuralında bu cookie'yi kontrol etmek olabilir. Bu işlemi aşağıdaki şekillerde yapabilirsiniz.
Altdizin
Örneğin sitenin http://www.syslogs.org olduğunu ve mobil sürümünün /mobile isimli bir altdizinden yayınlandığını düşünürsek, sitenin kök dizini altında oluşturulacak redirect.php isimli bir php dosyasına, hem normal sürüme redirect işlemini yapmak hem de mobil sürümden normal sürüme geri gidildiğini anlamak üzere kullanıcıya bir cookie set edilmesini belirtmek için şu ibrareler girebiliriz:
<?php header('Location: http://www.syslogs.org/'); setcookie('normalsurum', '1'); ?>
Daha sonra mobil sürümün anasayfasından bu php dosyasına örnek olarak “Normal sürüme dönmek için tıklayınız” başlıklı bir link verebilir ve kök dizininde bulunan .htaccess dosyasına şu şekilde bir yönlendirme kuralı yazılabilir:
RewriteEngine On RewriteCond %{REQUEST_URI} !^/mobile.*$ RewriteCond %{REQUEST_URI} !^/redirect.php RewriteCond %{HTTP_COOKIE} !normalsurum=1 RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC] RewriteRule ^(.*)$ /mobile%{REQUEST_URI} [L,R=302]
Böylece mobil sürümde bulunan redirect linkine tıklayan kullanıcılar hem normal sürüme yönlendirilecek hem de adı normalsurum ve değeri 1 olan bir cookie atanacaktır. Normal sürüm altında bulunan .htaccess dosyası da kullanıcıda normalsurum isimli cookie'yi kontrol edip değeri 1 ise bu mobil kullanıcının normal sürüme gitmesine izin verecektir.
Subdomain
Aynı işlemim subdomain versiyonu ise şu şekilde gerçekleştirilebilir: (Sitenin www.syslogs.org olduğunu ve mobile sürümün m.syslogs.org isimli subdomain'den yayınlandığını varsayıyoruz.)
Gene normal sürümün kök dizininde redirect.php isimli bir php dosyası oluşturup aşağıdaki redirection ve cookieset ibarelerini giriyoruz:
<?php header('Location: http://www.syslogs.org/'); setcookie('normalsurum', '1'); ?>
Sonrasında kök dizininde bulunan .htaccess dosyasına aşağıdaki rewrite kuralını giriyoruz:
RewriteEngine On RewriteCond %{REQUEST_URI} !^/redirect.php RewriteCond %{HTTP_COOKIE} !normalsurum=1 RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC] RewriteRule ^(.*)$ http://m.syslogs.org%{REQUEST_URI} [L,R=302]
Sonrasında da mobil sürümün anasayfasında bu oluşturulan php dosyasına link veriyoruz. Böylece normal sürüme gitmek isteyen mobil kullanıcılar bu linke tıklayabiliyor ve kendilerine bir cookie set ediliyor, rewrite kuralında da bu cookie göz edildiği için normal sürüme erişim izni verilmiş oluyor.
Bu yazılar da ilginizi çekebilir:
- apache: password protected bir alanda dosya / dizin exclusion
- Apache mod_proxy, mod_cache ile Reverse Proxy Kurulumu
- Php5 (PHP-FPM) + MySQL destekli Nginx Kurulumu
- Eaccelerator hit: httpd-error.log
- FreeBSD Apache Http Accept Filter Warning
Yorumlar
Trackbacks
Yorumda bulunun.
Cagri selam, cok guzel bir dokuman olmus ancak ben sunu sormak istiyorum. Baska bir domainde mobil sayfayi yayinlamak ve ana sayfayi oldukca light tutup eger mobil kullanici iseniz mobile sayfa linkine tiklayin demek daha mi yuksuz bir tercih olur sunucu adina? :) Bir de nginx icin isteriz bu bilgileri, tesekkurler.
[Cevapla]
Selamlar,
Elbette yönlendirme işini kullanıcının kendi kendisine yapmasını sağlamak da bir yöntem ancak mod_rewrite ile otomatik yönlendirmenin çok büyük performans kayıplarına neden olacağını sanmıyorum.
Nginx ile bir türlü uğraşma fırsatım olmadı ama bir ara incelemek hatta belli noktalarda kullanmak istiyorum. Belki o zaman bu konuda da yazabilirim:)
Çağrı.
[Cevapla]
Verdiğiniz bilgiler için teşekkürler. Sorunsuz çalışıyor gerçekten
Fakat bir sorum olacak.
Örneğin sitenin belli bir kısmını yönelendirmek isyiyorsak ne yapmalıyız.
Örneğin http://www.siteadi.com/haberler/ altındaki sayfaları m.siteadi.com/haberler e yönelndirmeyi nasıl yapabiliriz.
Ertan Özal
[Cevapla]
Asagidaki sekilde /haberler dizini altina helen URL’leri m.siteadi.com/haberler URL’sine rewrite edebilirsiniz. (Mobile cihazlar spesific olarak belirtilmedi.)
[Cevapla]
gerçekten çok teşekkür ederim kaç gündür bu kodları arıyordum sayenizde yönlendirebildim. TEŞEKKÜRLER.
[Cevapla]
Bilgi icin tesekkurler.ana sitemi subdomain mobil siteme yonlendiriyorum,ancak tersini bir turlu yapamadim.php dosyasini ana sitenin mi ,mobil stenin mi rootuna aticaz.
[Cevapla]
Sitenin root dizinine koymanız gerekiyor, .htaccess dosyadındaki redirect yapılandırmasında eğer istek redirect.php’ye gelmiyorsa yönlendir mealine gelen aşağıdaki sator var:
RewriteCond %{REQUEST_URI} !^/redirect.php
Bu şekilde mobil kullanıcılarınız sitenin kök dizininde bulunan php dosyanıza erişebiliyorlar.
Yalnız php dosyasının adını redirect değil de başka bir şey veriyorsanız, .htaccess içinde de aynı ismi kullanmanız gerekir.
[Cevapla]
sub domain ile oluşturulmuş bir siteye , ana dizinden sub domainin bulunduğu dizine dosya include edilebilirmi.Resim,css gibi dosyaların linkini tam verdiğimde oluyor ama php sayfasını include edemiyorum.
[Cevapla]
Yazı için öncelikle teşekkür ederim çok detaylı şekilde anlatılmış. Benimde yönlendirme ile alakalı sorunum var yardımcı olursanız sevinirim.
Sitemde bir tema yüklü ve mobil sürüm için uygun değil. Bende eklenti kurup mobil bir site yaptım. Yalnız subdomain değil normal olarak dolaşılabiliyor. Fakat temanın kendine ait özel sayfası var. Okuma ayarlarından o sayfa seçili. Dolayısı ile ziyaretçi siteye iriş yaptığı anda html kodları ile karşılaşıyor. Ama alt sayfalara erişim sağlanıyor onda sıkıntı yok.
Benim sormak istediğim mobil ziyaretçiler için ana sayfayı nasıl değiştirebiliriz.
Örnek;
http://www.siteadi.com bu sayfa
http://www.siteadi.com/mobile bu sayfaya yönlendirecek.
Bazı htaccess ve php kodları denedim ve işe yarayan da oluyor fakat ziyaretçi alt sayfaya gitmek istediğinde sonsuz döngüye giriyor.
http://www.siteadi.com/mobile/altsayfa
olarak yönlendirmeye çalışıyor.
Halbu ki;
http://www.siteadi.com/altsayfa
olması gerekiyor.
Biliyorum biraz uzun oldu ama kusura bakmayın. Ben sadece mobil ziyaretçiyi ana sayfaya gelmek istediğinde tek bir sayfaya yönlendirmek istiyorum. Diğer sayfalara gitmek istediğinde ona dokunulmasın. Şimdiden teşekkür ederim.
[Cevapla]
Hangi eklentiyi kullanıyorsunuz ?
[Cevapla]
merhaba verdiğiniz kodları uyguluyorum normal girişte sorun yok ancak cep telefonlarından girilince şöyle bir hata veriyor.
” Sayfada çok fazla sunu yönlendirmesi mevcut. ”
bu hata şu satırı silince çıkmıyor.
RewriteRule ^(.*)$ http://mobil.siteadi.com%{REQUEST_URI} [L,R=302]
[Cevapla]
Selamlar,
Belli ki loop’a giriyor, bu da yönlendirme işleminin hem normal hem de mobil sürüm için yapıldığını düşündürüyor. Oysa bu yönlendirmenin çalışması için mobil sitenin ayrı bir vhost üzerinden yayınlanması gerekir. Sizin tek bir vhost’unuz varsa ve yönlendirmeyi anlatıldığı şekilde yapıyorsanız loop’a girmesi normaldir.
[Cevapla]
normla site http://siteadi.com , maobil sitede http://mobil.siteadi.com seklinde.
[Cevapla]
O halde mobil.siteadi.com’da bir sorun olmalı; çünkü siteadi.com’un ana .htaccess’inden mobile’e yönlendiriliyor ve artik siteadi.com’a geri dönmesi (ve loop’a girmesi) için bir neden kalmıyor. mobil sitenin .htaccess’inde herhangi bir yönlendirme var mı ?
[Cevapla]
oncelikle cevaplarınız için teşekkür ediyorum. mobil sitede htaccess yok ki. ayrıca mobil siteye direk adres yazarak girdigimde sayfa sorunsuz calışıyor.
[Cevapla]
Rica ederim.
O halde size özel bir nedenle bir şekilde yönlendirme düzgün yapılamıyor. Zira ben aynı şekilde düzgün olarak kullanabiliyorum.
[Cevapla]
Sitemin mobil temasına yönlendirme için htaccess’e aşağıdaki kodu ekledim ancak sadece ben mobil cihazdan kendi şifremle giriş yapınca yani admin girişinde mobil tema görünüyor.Diğer girişlerde veya şifresiz girişlerde normal tema görüntüleniyor. Sorun neden kaynaklanıyor nerede hata yapıyorum acaba?
RewriteCond %{REQUEST_URI} !^/index.php?styleid=36/.*$
RewriteCond %{HTTP_USER_AGENT} “android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile” [NC]
RewriteRule ^(.*)$ /index.php?styleid=36/ [L,R=302]
[Cevapla]
Merhaba, Mobil uyumlu bir sayfam var. Ben sayfama mobilden giriş yapıldığında Google Play de olan uygulamamın indirilmesini öneren bir sayfa çıkmasını kişi kabul ederse yönlendirmesini kabul etmezse normal sayfadan devam etmesini istiyorum. Bunun en güzel örneğini hepsiburada comda görmüştüm. Böyle birşeyi yapmak mümkün mü.
Selamlar…
[Cevapla]
Elinize sağlık güzel ve çok yararlı bir anlatım olmuş işe yaradı ;)
[Cevapla]
Hocam öncelikle emeğinize sağlık, faydalı anlatım için teşekkür ederim. Benim sormak istediğim wordpress sistemleri içinde bunu uygulamak mümkünmü ?
Geçenlerde Tf de wp için mobil temalar gördüm nette biraz araştırdım ve ücretsiz bir iki tane buldum eklenti gibi kurulur sandım ama sanırım farklı.
[Cevapla]
Uygulanabilir ama o temalar (pluginler) otomatik olarak yapiyorlar o isi zaten.
[Cevapla]
Arkadaşım merhaba, çok güzel bir paylaşım yapmışsın, benim şöyle bir sorunum var, sitemin mobil sürümü hazır bi templateden alıntı ve bozuk, benim amacım mobil sürümünün gösterilmememesi, yani cepten ve ya tabletten girdiği zamanda normal sürümü görsün istiyorum, sitem http://www.guven-kurye.com bilgi verebilirsen sevinirim teşekkürler.
[Cevapla]
hocam çok güzel anlatmışsın ama ben anlamadım :)
[Cevapla]
hocam ben aksine mobil surumu normal surume yonlendirmek istiyorum yani mobil telefonlarla gelenler sitede kalsin pc ile gelen kullanicilar başka bir siteye yönlendırmek istiyorum yardim ederseniz sevinirim
[Cevapla]
Sitenin mobil versiyonu sade telefonlarda açılsın ama tabletlerde açılmasın yani tabletlerde sadece normal sitem açılsın nasıl yapabilirim şimdiden çok teşekkürler
[Cevapla]
Merhabalar subdomain e yönlendirmeyi denedim fakat ” Sayfada çok fazla sunu yönlendirmesi mevcut. ” şeklinde bir hata alıyorum normal site webde açılıyor fakat telefonum android ve aldığım hata bu şekilde.
[Cevapla]
merhaba
anlatım çok güzel.
benim sitemde normal kodlarla yönlendirme var. gayet sorunsuz çalışıyor. mobilden giren mobile normal pc den giren normal siteye yönleniyor. fakat mobilden normal siteye geçme işlemini yapamıyorum. .htaccess dosyasıyla bir türlü yapamadım. dizinde .htaccess dosyasını oluşturuyorum fakat kodu içine ne şekilde ekleyeceğimi bilmiyorum. php formatında mı eklemek gerekiyor.
site http://www.e5otomotiv.net
[Cevapla]
Allah razı olsun verdiğiniz bilgiler için. Cevap yazacağınız umuduyla bende bir sorunumu paylaşmak istiyorum.
Haber sitemdeki herhangi bir haberi sosyal medyada paylaşıyorum. Telefonundan paylaşıma tıklayanlar habere ulaşamıyor fakat mobil ana sayfa açılıyor. Mobil yönlenme işi ekran çözünürlüğüne göre yazılan scriptle yapılıyor. Site hazır bir haber sitesi kodlar ioncube ile korumalı, htaccess dosyası mevcut ve dosya içinde mobil ile ilgili bir ibare yok.
Saygılar.
[Cevapla]
hocam yönlendirme tamam
normalden mobile mobilden normale geçişler de tamam
ama şöyle bir sorun var bulunduğu linkten geçiş yapmasını nasıl yapacağız..
örneğin; m.lafdemligi.com/uyeler buraya bakan birisi normal sürüme geçerken
http://www.lafdemligi.com/uyeler buraya gelmesi lazım. bunu nasıl yapabiliriz ?
[Cevapla]
bir de çok fazla yönlendirme alan arkadaşlar sitenizin sadece ana dizinindeki yani normal sitedeki .htaccess dosyasında yönlendirme yapın
[Cevapla]
gerçekten dışarıda aktarılanlardan çok daha basit ve iki kopyala yapıştır ile mobile yönlendirmeyi sağladım. Allah razı olsun çok teşekkür ettim :)
[Cevapla]
Hocam benimde bir sorum olacak. Mesela masaustu veya laptoptan giren birisi diyelimki mobil siteye girdi. Onlarıda otomatik ana siteye nasıl yönlendiririz? Birde bunun seo açısından bir zararı olur mu? Mantık olarak daha yararlı olur sanırım dimi?
[Cevapla]
Hocam bir sorum olacak. Normal görünüme geçme olayını detaylı resimli felan anlatabilir misiniz herkes tam anlamıyla bilmiyor bu işleri. Yani mobil siteye normal görünüme geç diye link eklemek istiyorum ama beceremedim.
[Cevapla]
Allah razı olsun işime yaradı..
[Cevapla]
Benim merak ettiğim konu şu ; Örneğin http://www.syslogs.org benim ana sitem fakat ben bu siteme giren mobil ve ipad kullanıcılarını http://www.syslogs1.org sitesine yönlendirmek istiyorum bunu htaccessden tam olarak nasıl yapabilirim yardımcı olabilirmisiniz bana ?
[Cevapla]
Bu işin tersi yok mu?
Normal bilgisayardan mobil içerik görünmemeli.
Paylaşım için teşekkürler.
[Cevapla]
Bilgileriniz için çok teşekkürler, dünden beri deniyordum olmuyordu, panelden baktığımda htaccess.txt olarak bir dosya daha vardı alakası yoktur dedim ama ismini değiştirince yönlendirme aktif oldu.
[Cevapla]
Mobil yönlendirme gerçekleşiyor fakat google üzerinde alt sayfa araması yapıldığı zaman sitenin masaüstü aramasına yönleniyor bunun sebebi nedir?
[Cevapla]
mrb hocam mobil site kurulumunu video ya alsanız görsel anlatımla daha kolay ve süper olur beklıyoruz
[Cevapla]
Hocam merhaba,
işlem bilgisi için çooook ama çok teşekkürler. Çok işime yaradı. Merak ettiğim işlemin tam tersi var mıdır? yani mobil sürüm adresini computer ve laptoplardan girenleri direk www. ana siteye yönlendirme?
Böyle bir şey mümkün müdür?
Teşekkürler
[Cevapla]
hocam benim kurduğum temada sıkıntı yoktu fakat sonradan bir virüs bulaştı ki çözemedim. mobil telefondan google’a girip pandaillustrasyon şeklinde arattığım zaman siteyi çıkan sonuçlardan bulup tıkladığımda başka siteye yönelendiriyor nasıl çözebilirim.
[Cevapla]
Merhaba,
Aşağıdaki kodu m.birnc.com.tr’ye eklediğimizde gerekli yönlendirme yapılıyor ancak bu kezde fotoğraflarda çarpı işareti oluyor ve açılmıyor sebebi ne olabilir?
Mobil sürümün örnek olarak “m.syslogs.org” gibi bir sub domaini varsa ve ayrı bir VirtualHost tanımlaması ile yayınlanıyorsa, normal sürümün kök dizininde bulunan .htaccess dosyasında aşağıdaki tanımlamalar girilebilir:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} “android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile” [NC]
RewriteRule ^(.*)$ http://m.syslogs.org%{REQUEST_URI} [L,R=302]
[Cevapla]
Hocam merhaba,
Peki tam tersini nasıl yapabilirim?
Yani kullanıcı mobil değil ise dış linke bir yere göndermek istiyorum. Yani siteyi sadece ANDROİD mobil cihazlar görsün istiyorum. Windows, Linux Mac OSX ise siteyi dış linke, eğer ANDROİD ise iç linke yönlendirme?
Yadımcı olabilirseniz sevinirim teşekkürler
[Cevapla]
Öncelikle bu faydalı yazınız için teşekkür ederim.
Çözemediğim bir problem var.
Örneklendirirsek;
http://www.ornek-site.com/?a=100&b=200
Burada sorun yok, mod_rewrite ile gerekli replace i yapabiliyorum.
Fakat dinamik yapılı sistemlerde değişkenler yer değiştirebilmekte,
Mesela;
http://www.ornek-site.com/?b=200&a=100
gibi a ve b değişkenleri yer değiştire bilmekte.
Bu durumda mod_rewrite ı nasıl yazmalıyım ki, her iki durumda da işlevsel olsun.
Teşekkür ederim.
[Cevapla]
Burada iki değişkenle örnek verdim, değişken adeti bazen 10 u bula bilmekte.
[Cevapla]