4

Right, so i've a number of sites, and I'm trying to implement a redirect to the mobile version of the site, should the device accessing the desktop site be mobile.

i've done this in PHP in the past, and in .js, but this site is giving me issues.

RewriteEngine on
RewriteLogLevel 9
RewriteLog /home/BenTen/rewrite.log
RewriteCond   %{HTTP_HOST} !^dev.site.com$
RewriteRule   ^/(.*) https://dev.site.com/$1 [L,R]
RewriteCond   %{SERVER_PORT}  !^443$
RewriteRule   ^/(.*)  https://%{HTTP_HOST}/$1 [L,R]

#cb5b3ebd6f2cb1c07a18cc033783c9e5 = mobile hashed value
RewriteCond %{HTTP_COOKIE} !device_type=cb5b3ebd6f2cb1c07a18cc033783c9e5
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|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|phone)|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]
RewriteRule ^/(.*)$ https://m.site.com/login [R,L]

So i'm restarting the service in CentOS by using /sbin/service httpd restart

and i'm getting successful messages from this, but it doesn't seem to be picking up on the redirect from the frontend.

Really under pressure to get this working, and really struggling to get any real logging values.

Do i need to bounce the server to pick this up?

it's on weblogic 11.

Thanks again, Ben

Ben Coughlan
  • 555
  • 3
  • 12
  • 23
  • 1
    It's not really clear what exactly is it that you're asking, and where is it that you're having a problem. – cnst May 02 '15 at 21:48
  • 1
    Checkout the existing answer as well which is here http://stackoverflow.com/a/3796954/1635676 – Touqeer Shafi May 03 '15 at 19:05
  • 1
    Restarting the service should be enough. Where are you placing this code? `.htaccess`? – Darvanen May 04 '15 at 00:00
  • HI @Darvanen I'm using the /opt/local/apache-2.2.17/conf.d/ssl.servername.conf and /opt/local/apache-2.2.17/conf.d/rewrite.servername.conf files. there is no .htaccess file anywhere on the server. – Ben Coughlan May 04 '15 at 13:12
  • Right, so I've spotted the issue, it's redirecting HTTP requests now, but not HTTPS requests. Do you know if there's another flag I need to set to get HTTPS requests to pass to the mobile site? Thanks again, Ben – Ben Coughlan May 04 '15 at 13:31
  • 1
    I'm afraid I can't see why it wouldn't be picking up https requests, sorry. – Darvanen May 04 '15 at 14:16
  • Thanks man, it's really weird, It must have something to do with the ssl rules being picked up first. – Ben Coughlan May 04 '15 at 14:35

4 Answers4

3

To get full list of user agent for mobile, go to : http://detectmobilebrowsers.com/

Here an extract for apache :

RewriteEngine On
RewriteBase /
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]
RewriteRule ^$ https://m.site.com/login [R,L]

And for test, use google chrome (f12) and click to "toggle device mode" and play with user agent and width of screen.

bastien
  • 190
  • 1
  • 9
2

I don't think I have the answer but I'll give some details on what I'd do with this:

1-Disable the HTTPs rules to test the Mobile routes standalone.

2-Eventually move the HTTPS rules below the Mobile ones; although I wouldn't do that in Production to avoid unnecessary preg-matching in the User Agent just to find out the request was http.

3-Do not test with browsers, because of the browser's caching rules, just test with

curl -IL -A "Mozilla/5.0 (Linux; Android 4.4; Nexus 5 Build/_BuildID_) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36"

and to check the headers in the curl output. You're expecting to see a "Location" response.

Nico Andrade
  • 880
  • 5
  • 16
2

Change

RewriteRule ^/(.*)$ https://m.site.com/login [R,L]

to

RewriteRule ^(.*)$ https://m.site.com/login [R,L]

(Or you can simplify further

RewriteRule ^(.*)$ https://m.site.com/login [R,L]

as you don't need the back reference. It'll be related to your settings and the way the path is canonicalized before being passed to .htaccess)

Robbie
  • 17,605
  • 4
  • 35
  • 72
0

Right, got it, the text itself was correct, it just required me to add it in two places.

one - /opt/local/apache-2.2.17/conf.d/ssl.devservice.conf < Code is placed immediately after SSLEngine On - it monitors all HTTPS traffic/ requests.

two - /opt/local/apache-2.2.17/conf.d/rewrite.devservice.conf < - monitors HTTP traffic only.

I hope this helps someone, it took me entirely too long to figure any of this out!

Thanks again for your help all :)

Ben Coughlan
  • 555
  • 3
  • 12
  • 23