Etiket arşivi: apache

.htaccess ile Mobil Ziyaretçilerin Mobil Sürüme Yönlendirilmesi

Akıllı tmobil-site-yonlendirmeelefonların ve tabletlerin yaygınlaşması ile internetin mobil kullanımı büyük oranda arttı. İleride mobil kullanımın giderek daha da artacağı kaçınılmaz gibi görünüyor. Bu nedenle artık sitelerimizi mobil cihazlara göre tasarlamalı ve yayınlamalıyız da. Artık hemen hemen her internet sitesinin bir 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.

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.

 

Mobil Sürüme Yönlendirme

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 Alt Klasördeyse

Ö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.sistemdestekuzmani.com/deneme url’sine gelmekteyse kullanıcı, http://www.sistemdestekuzmani.com/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.sistemdestekuzmani.com” 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.sistemdestekuzmani.com%{REQUEST_URI} [L,R=302]

Bu şekilde de user agent kısmında ilgili mobil cihazlara ait ibareler geçen istekler, http://m.sistemdestekuzmani.com/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

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.

Alt Klasördeyse

Örneğin sitenin http://www.sistemdestekuzmani.com 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.sistemdestekuzmani.com/’);
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.sistemdestekuzmani.com olduğunu ve mobile sürümün m.sistemdestekuzmani.com 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.sistemdestekuzmani.com/’);
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.sistemdestekuzmani.com%{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.