Skip to content

Configuring a mobile subdomain for apache

peakpg edited this page Mar 28, 2012 · 3 revisions

This module relies heavily on Apache and mod_rewrite in order to automatically detect what device a user is browsing the site, and redirect them accordingly. These steps cover how to configure Apache so that will end up with the following subdomains.

  • www.example.com - Public 'full' site for visitors (Cached)
  • cms.example.com - Admin access (uncached)
  • m.example.com - Mobile subdomain (Cached)

The first two (www and cms) are the standard CMS subdomains you configure as per the Deployment-Guide. The new mobile subdomain will serve the mobile content. Anytime you see one of the above domain names below, just substitute your project's domain for it. Here is a sample conf file for it.

NameVirtualHost *:80

<VirtualHost *:80>
   DocumentRoot "/var/www/vhosts/examplesite/public"
   ServerName www.example.com
   RailsEnv production
   RewriteEngine On

   # Set a 'full site' cookie if the user wants to stay on the full site. (2 weeks cookie by default)
   RewriteCond %{QUERY_STRING} prefer_full_site=true
   RewriteRule ^/?(.*)$ http://www.example.com/$1? [L,CO=prefer_full_site:true:.example.com:840]

   # If the user wants the mobile site, set the cookie, redirect and stop.
   RewriteCond %{QUERY_STRING} prefer_mobile_site=true
   RewriteRule ^/?(.*)$ http://m.example.com/$1? [L,CO=prefer_full_site:false:.example.com:840]

   # Redirect Mobile users to m. based on user agent
   RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
   RewriteCond %{HTTP_COOKIE} !prefer_full_site=true
   RewriteRule ^/(.*) http://m.example.com/ [L,R=302]

   # Page Caching
   RewriteRule ^/$ /cache/index.html [QSA]
   RewriteRule ^([^.]+)$ /cache/$1.html [QSA]

   # Rewrite Logging (Can be commented out once you verify it works)
   RewriteLog /var/sites/mysite/log/rewrite.log
   RewriteLogLevel 9
</VirtualHost>

<VirtualHost *:80>
   DocumentRoot "/var/www/vhosts/examplesite/public"
   ServerName m.example.com
   RewriteEngine On
   RewriteRule ^/$ /mobile_cache/index.html [QSA]
   RewriteRule ^([^.]+)$ /mobile_cache/$1.html [QSA]
   RailsEnv production
</VirtualHost>

<VirtualHost *:80>
   DocumentRoot "/var/www/vhosts/examplesite/public"
   ServerName cms.example.com
   RailsEnv production
</VirtualHost>

Clone this wiki locally