htaccess ile Mobil Ziyaretçilerin Mobil Sürüme Yönlendirilmesi
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.
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:
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:
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:
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:
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:
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:
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.
Kaynak