CodingForums.com

CodingForums.com (http://www.codingforums.com/index.php)
-   Apache configuration (http://www.codingforums.com/forumdisplay.php?f=69)
-   -   htaccess redirect on mobile and desktop for subdomain (http://www.codingforums.com/showthread.php?t=253625)

Shan-tal 03-08-2012 06:35 PM

htaccess redirect on mobile and desktop for subdomain
 
Hi,

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:


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]

Thanks,
Shan-tal

leslie.jones 03-09-2012 07:29 AM

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:

Code:

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.


All times are GMT +1. The time now is 05:48 AM.

Powered by vBulletin®
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.