This is something I want to fix for a long time.

To begin, on my website I have a cookie named MDD and its set to 1 if the mobile detection has already happened. This is my 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]

Thats fine, but the problem is that on each version of the website, I'm trying to set the cookie when the user switches between desktop and mobile mode so that the user doesn't end up in an endless redirect.

I have a rule set like this for the desktop site:

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

I have a rule set like this for the mobile site:

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

I want to be able to allow the mobile user to visit the desktop site without trouble and the only way to do that is to set the cookie.

The problem with my idea that I think google might have is that a redirect is present while the cookie is being set.

Is there a way to eliminate such redirects and still allow the users to ultimately decide which site they want to visit (desktop or mobile) after initially being redirected to the proper site?

  • "The problem with my idea that I think google might have is that a redirect is present while the cookie is being set." - Google doesn't set the cookie (it's basically ignored). But I don't really see that as a problem if you always redirect the Google Mobile user-agent to the mobile site? (Shouldn't you be redirecting to the corresponding page on the other site, rather than the document root?)
    – MrWhite
    Commented Nov 8, 2015 at 20:40
  • Maybe just a copy/paste error(?), but the second RewriteRule in the first code block would seem to cause a redirect loop?!
    – MrWhite
    Commented Nov 8, 2015 at 20:42
  • The two single rewriterule lines are from the separate sites. its my site that sets the mdd cookie to prevent a redirect loop when mobile device wants a desktop page Commented Nov 9, 2015 at 0:45

1 Answer 1


Maybe get it done without cookie and saving the state?

You decide on every visit with media query based on visitors monitor width, which version to serve, and, beside of this initial decision, implement on both, desktop and mobile, versions a nofollowed link to another version, like "wanna check, how looks our desktop/mobile version?"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.