web-dev-qa-db-fra.com

Une meilleure méthode pour enregistrer l'état entre le site de bureau et le site mobile

C'est quelque chose que je veux corriger depuis longtemps.

Pour commencer, j'ai sur mon site Web un cookie nommé MDD et défini sur 1 si la détection de mobile a déjà eu lieu. Ceci est mon code:

RewriteCond %{HTTP_COOKIE} !MDD=1;?
RewriteCond %{HTTP_USER_AGENT} (Android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|Kindle|lge\ |maemo|midp|mmp|mobile.+firefox|netfront|opera\ m(ob|in)i|Palm(\ os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows\ ce|xda|xiino [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a\ wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r\ |s\ )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1\ u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp(\ i|ip)|hs\-c|ht(c(\-|\ |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac(\ |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt(\ |\/)|klon|kpt\ |kwc\-|kyo(c|k)|le(no|xi)|lg(\ g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-|\ |o|v)|zz)|mt(50|p1|v\ )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v\ )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-|\ )|webc|whit|wi(g\ |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-) [NC]
RewriteCond %{HTTP_Host} ^(www\.|)example.\.com$ [NC]
RewriteRule ^(.*)$ http://m.example.com/ [NC,R=301,L]
RewriteRule ^(.*)$ http://example.com/ [NC,R=301,L]

C'est bien, mais le problème est que, sur chaque version du site Web, j'essaie de définir le cookie lorsque l'utilisateur bascule entre le mode bureau et le mode mobile afin que l'utilisateur ne se retrouve pas dans une redirection sans fin.

J'ai une règle comme celle-ci pour le site de bureau:

RewriteRule ^mobile-site$ http://m.example.com/ [R=301,NC,L,CO=MDD:1:.example.com:144000:/]

J'ai une règle comme celle-ci pour le site mobile:

RewriteRule ^desktop-site-force$ http://example.com/ [R=301,NC,L,CO=MDD:1:.example.com:144000:/]

Je veux pouvoir autoriser l'utilisateur mobile à visiter le site de bureau sans problème et le seul moyen de le faire est de définir le cookie.

Le problème avec mon idée que Google pourrait avoir, selon moi, est qu'une redirection est présente pendant la configuration du cookie.

Existe-t-il un moyen d’éliminer ces redirections tout en permettant aux utilisateurs de choisir le site qu’ils souhaitent visiter (ordinateur de bureau ou mobile) après avoir été redirigé vers le site approprié?

2
Mike

Peut-être que le faire sans cookie et sauver l'état?

Vous décidez chaque visite avec une requête multimédia en fonction de la largeur du moniteur de visiteurs, de la version à servir et, outre cette décision initiale, vous implémentez sur les versions, de bureau comme mobile, un lien nofollowed vers une autre version, comme "wanna check, how looks our desktop/mobile version? "

1
Evgeniy