Hello and welcome to our community! Is this your first visit?
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 2 of 2
  1. #1
    New to the CF scene
    Join Date
    Mar 2012
    Thanked 0 Times in 0 Posts

    htaccess redirect on mobile and desktop for subdomain


    I am trying to do the following in htaccess:

    www.example.com to m.example.com - on mobile (detect user agent)
    m.example.com to www.example.com - on desktop

    I got the first part of mobile redirect done but if I try to configure the second i get an unending loop. Here is my htaccess code:

    RewriteCond %{HTTP_USER_AGENT} 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 [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|e\-|e\/|\-[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|xda(\-|2|g)|yas\-|your|zeto|zte\-) [NC]
    RewriteRule ^$ http://m.example.com [R,L]
    # Redirect on desktop example.com, m.example.com to www.example.com
    RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
    RewriteCond %{HTTP_HOST} ^m\.example\.com$
    RewriteRule ^/?$ "http\:\/\/www\.example\.com" [R=301,L]
    Last edited by Inigoesdr; 03-10-2012 at 04:44 AM.

  2. #2
    New Coder
    Join Date
    Nov 2011
    Thanked 26 Times in 26 Posts
    In part 2 you are saying if the host header starts example or m.example then redirect to www.example.com.

    I'd ask this:

    Is the physical directory for www.example.com different to the physical directory where the .htaccess file is held?

    If it is different, but under the root where .htaccess file with the rule is held, it may be inheriting from the root .htaccess file. At one point in time the default behaviour was that an .htaccess in the root folder will affect all its subfolder, unless overwritten by subfolder-specific .htaccess files. However, that appears to have changed and inheritance is no longer the default behaviour. It is set by the directive RewriteOptions inherit | InheritBefore so check these are not set.

    If your redirect is into the same root directory you will have a loop. .htaccess runs every time the directory is entered. The 'last rule' stanza applies on a per iteration basis. Your host header is not rewritten by your rule - which forms you logic test - so the condition will always be true, taking you into a never ending loop. The fix is probably to direct into another directory.

    Depending on the access you have to the server, you can enable logging for mod_rewrite with something like this in the vhost declaration/httpd.conf:

    RewriteLogLevel 3
    RewriteLog /var/log/apache2/rewrite.log
    This will show you exactly what is happening.

    Personally I would code for this in a scripting language like php or asp and just include it at the top of each page, rather than let mod_rewrite do it. It's a bit 'clunkly' for the job you are trying to do.


Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts