Dans un billet précédent, je détaillais comme mettre en place une redirection mobile basée sur l’en-tête HTTP User-Agent, avec Squid. Exemple : quand un mobile se rend sur www.monsite.com, il est redirigé vers mobile.monsite.com.
Maintenant, nous désirons ajouter un lien sur mobile.monsite.com qui permette d’accéder au site en mode normal (www.monsite.com).
Problème : la redirection est en place, et dès que le mobile retournera sur www.monsite.com, il sera redirigé de nouveau.
Solution : en se basant sur l’en-tête HTTP Referer, on ne redirige pas les mobiles quand l’utilisateur vient du domaine *.monsite.com
Réalisé de la manière suivante dans la configuration Squid :
################################### # on redirige les telephones vers mobile.monsite.com url_rewrite_program /etc/squid/redirect_mobile.sh acl symbian browser Symbian acl iphone browser iP(hone|od) acl android browser Android acl mobile_url dstdomain mobile.monsite.com acl from_monsite referer_regex ^http\://[^/]+\.monsite\.com # on teste si l'utilisateur vient de *.monsite.com url_rewrite_access deny mobile_url url_rewrite_access deny from_monsite # on ne redirige pas quand c'est le cas url_rewrite_access allow symbian url_rewrite_access allow iphone url_rewrite_access allow android url_rewrite_access deny all
De cette manière, si le mobile vient de l’extérieur (d’un moteur de recherche ou autre site, ou qu’il tape directement l’URL dans la barre d’adresse), il sera redirigé. En revanche, s’il a cliqué sur un lien « www.monsite.com en mode normal » depuis mobile.monsite.com, il ne sera pas redirigé.
Note :
Cette solution est aisément transposable en règles de réécriture apache.