Created
June 12, 2012 18:24
-
-
Save dangayle/2919206 to your computer and use it in GitHub Desktop.
NGINX Mobile redirect
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#with regex from http://detectmobilebrowsers.com/ | |
#map suggestion via kolbyjack | |
#not tested | |
map $http_user_agent $mobile_agent{ | |
default 0; | |
~* "android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino" 1; | |
~* "^(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(di|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\-)" 1; | |
} | |
#set $mobile_rewrite variable | |
set $mobile_rewrite do_not_perform; | |
if($mobile_agent = 1){ | |
set $mobile_rewrite perform; | |
} | |
#check if query arg = yes (example.com?mobile=yes), set variable | |
if ($arg_mobile = 'yes') { | |
add_header Set-Cookie mobile=yes; | |
set $mobile_rewrite perform; | |
} | |
#check if cookie mobile=yes, set variable | |
if ($cookie_mobile = 'yes') { | |
set $mobile_rewrite perform; | |
} | |
#check if cookie mobile=no, break | |
if ($cookie_mobile = 'no') { | |
set $mobile_rewrite do_not_perform; | |
} | |
#check if query arg = no (example.com?mobile=no), break | |
if ($arg_mobile = 'no') { | |
add_header Set-Cookie mobile=no; | |
} | |
#if $mobile_rewrite = perform, do the redirect | |
if ($mobile_rewrite = perform) { | |
return 301 $scheme://mobile.domain.com$request_uri; | |
} |
I think ~* must be inside string
In case someone finds this in the future:
- the map directive needs to go into the http block
- make sure to quote the whole string, including ~* (see comment above)
- the first if statement is missing a space between the if and the parentheses (
if(
instead ofif (
) - everything under the map directive, i.e. the if statements, need to go into a location block (likely
location / {....}
) - the regex neeeds to be updated from http://detectmobilebrowsers.com/
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I add something at line 39, but map section still not test ( i add that at location section so i can't use map )
https://gist.github.com/dd-han/11d39170d968f34b9de0fe4ccf7ca1e6