HTACCESS ile Mobil Yönlendirme


Yazımız en son 1 Mart 2017 tarihinde güncellenmiş ve 450 defa okunmuş.

Mobil Yönlendirme ile, mobil cihazların artışını göz ardı etmeyerek mobil uyumlu bir site kurduysak ziyaretçilerimizi buna göre yönlendirebiliriz.

Artık hemen hemen her web sitesinin bir de mobil sürümü bulunur hale geldi. İleride desktop ve laptopları tamamen kaldırıp bir köşeye atar mıyız bilinmez ama bu gidişle mobil kullanımın giderek daha da artacağı ve yaygınlaşacağı kaçınılmaz gibi görünüyor…

HTACCESS ile Mobil Yönlendirme

Mobil cihazlar üzerinden gelen isteklerin user agent bilgisi ile tespit edilerek otomatik olarak web sitesinin mobil sürüme yönlendirilmesi mümkün. Bu yönlendirme işlemini yapmak için Apache’nin “mod_rewrite” özelliği kullanılabilir.

Yönlendirme işlemlerini yapabilmek için gerekli olan birkaç adım var…

Öncelikle sunucu üzerinde Apache’nin “mod_rewrite” modülü aktif durumda olmalı. Ayrıca “AllowOverride” parametresinin “All” ya da en azından “Fileinfo” olarak ayarlanmış olması gerekiyor.

Yönlendirme işlemleri için birden fazla senaryo uygulanabilir. Örnek verecek olursak webs sitesinin mobil sürümü kök dizinde bulunan bir alt dizinden yayınlanıyorsa (Ör: domain.tld/mobil-surum) farklı bir senaryo, bir subdomain üzerinden yayımlanıyorsa (Örn.: mobil-surum.domain.tld) farklı rewrite kuralı kullanılması gerekmekte…

HTACCESS ile Mobil Yönlendirme

İşlem yapılacak web sitesinin mobil sürümü ilgili sitenin kök dizininde “domain.tld/mobil-surum” isimli bir klasörde bulunuyorsa ana dizinde bulunan “.htaccess” dosyasına eklenecek kod yapısı aşağıdaki şekilde olabilir;

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/mobil-surum.*$
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(.*)$ /mobil-surum%{REQUEST_URI} [L,R=302]

Yukarıdaki komutlar ile user agent kısmında Android, BlackBerry, iPad, iPhone vb. ifadeler bulunan cihazlar kullanılarak web sitesine gelen görüntüleme istekleri “mobil-surum” alt dizinine yönlendirilmiş olacaktır.

Biraz daha detaylı açıklayacak olursak;

İlgili istek www.domain.tld URL adresine geliyorsa kullanıcı www.domain.tld/mobil-surum adresine yönlendirilecektir.

İsteğin sürekli yönlendirmeye maruz kalarak sonsuz döngüye girmemesi adına, yönlendirme istenilen URL’de “mobil-surum” ibaresi bulunmaması durumunda yapılacaktır.

Web sitesinin mobil sürümü bir subdomain üzerinde bulunuyorsa…

Web sitesinin mobil sürümü örneğin “mobil-surum.domain.tld” gibi bir subdomain üzerinden yayımlanıyorsa, normal sürümün kök dizininde bulunan “.htaccess” dosyasına aşağıdaki kod yapısı eklenebilir;

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(.*)$ http://mobil-surum.domain.tld%{REQUEST_URI} [L,R=302]

Bu şekilde de user agent kısmında ilgili mobil cihazlara ait ifadeler geçen tüm istekler, http://mobil-surum.domain.tld adresine yönlendirilecektir.

Bu yönlendirme işlemlerinin yanı sıra mobil sürüme yönlendirilmiş olan kullanıcılara normal sürümü opsiyonel olarak görüntüleme şansı da vermek isteyebilirsiniz…

Ancak yukarıdaki şekilde yapılan yönlendirmelerde ilgili mobil cihazlardan gelen istekler başka herhangi bir koşula/kurala bakılmaksızın direkt olarak mobil sürüme yönlendirildiklerinden bu şekilde normal sürüme erişemezler.

Bu problemi çözmek içinde şu şekilde bir işlem uygulayabiliriz;

Redirection

Mobil bir cihaz üzerinden sitenin mobil sürümüne erişmiş olan bir kullanıcıya aynı zamanda normal sürüme de erişebilme şansı vermek istersek, mobil sürümden normal sürüme giden bir yönlendirme linki aracılığıyla kullanıcıya bir cookie atayabilir ve “.htaccess” dosyası üzerinde bu cookie’yi kontrol ettirebiliriz.

Örneğin web sitenin http://www.domain.tld olduğunu ve mobil sürümünün “mobil-surum” isimli bir alt dizinden yayınlandığını varsayarsak web sitesinin kök dizini altında oluşturulacak “yonlendir.php” isimli bir PHP dosyasına hem normal sürüme yönlendirme işlemini yaptırmak, hem de mobil sürümden normal sürüme geri gidildiğini anlamak için kullanıcıya bir cookie tanımlanmasını sağlamak için şu komutları kullanabiliriz;

<?php
header('Location: http://www.domain.TLD/');
setcookie('normal-surum', '1');
?>

Daha sonra mobil sürümün anasayfasından bu PHP dosyasına örnek olarak “Normal sürüme geri 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ı yazabiliriz.

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/mobil-surum.*$
RewriteCond %{REQUEST_URI} !^/yonlendir.php
RewriteCond %{HTTP_COOKIE} !normal-surum=1
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(.*)$ /mobil-surum%{REQUEST_URI} [L,R=302]

Böylece mobil sürümde bulunan yönlendirme linkine tıklayan bir kullanıcı hem normal sürüme yönlendirilecek, hem de kullanıcıya adı normal-surum ve değeri 1 olan bir cookie atanacaktır. Normal sürüme ait kök dizin altında bulunan “.htaccess” dosyası da kullanıcıda “normal-surum” isimli cookie’yi kontrol edip değeri 1 ise bu mobil kullanıcının normal sürüme gitmesine izin verecektir.

Aynı işlemi subdomain için ise şu şekilde gerçekleştirebiliriz;

Normal sürümün kök dizininde “yonlendir.php” isimli bir PHP dosyası oluşturup aşağıdaki yönlendirme ve cookieset parametrelerini ekliyoruz.

<?php
header('Location: http://www.domain.tld/');
setcookie('normal-surum', '1');
?>

Daha sonra kök dizininde bulunan “.htaccess” dosyasına aşağıdaki rewrite kuralını tanımlıyoruz.

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/yonlendir.php
RewriteCond %{HTTP_COOKIE} !normal-surum=1
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|ipad|iphone|ipod|iemobile|opera mobile|palmos|webos|googlebot-mobile" [NC]
RewriteRule ^(.*)$ http://mobil-surum.domain.TLD%{REQUEST_URI} [L,R=302]

Bu işlemden sonra da mobil sürümün anasayfasında oluşturmuş olduğumuz “yonlendir.php” isimli PHP dosyasına link veriyoruz.

Böylelikle normal sürüme gitmek isteyen mobil kullanıcılarımız bu linki kullanabiliyor ve linke tıkladıklarında kendilerine bir cookie tanimlanıyor, rewrite kuralında da bu cookie okunduğu için kullanıcıya normal sürüme erişme yetkisi verilmiş oluyor.

(*) TLD, (T)op (L)evel (D)omain anlamını taşır ve alan adı uzantısına göre değişiklik gösterir.

Kaynak: RootYetkisi