We recently needed to move several hundred mail domains from standard http to SSL secured HTTP (HTTPS). To do so, we chose one domain and used mod_rewrite to redirect to that domain. To make things more complicated, we also wanted to strip off the first part of the domain name.

If you were doing this for just one domain (or a small number) then you should be using a simple Redirect in a VirtualHost to accomplish this. However, since we needed to do it for a large number of domains, mod_rewrite was necessary to capture the hostname in a dynamic fashion.

As an example, our users were visiting:

  http://webmail.school.county.sch.uk/

to access their webmail and

  http://admin.school.county.sch.uk/

to access their mail administration interface.

Our software only requires the

  school.county.sch.uk

section of the hostname, and so we needed to redirect to

  https://new_ssl_host/v/school.county.sch.uk/webmail
  https://new_ssl_host/v/school.county.sch.uk/admin

Our rewrite rules look something like this:

  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^(web)?mail\.(.*) [NC]
  RewriteRule ^ https://new_ssl_host/v/%2 [R=301,L,QSA]

  RewriteCond %{HTTP_HOST} ^(mail|site-)?admin\.(.*) [NC]
  RewriteRule ^ https://new_ssl_host/v/%2/admin [R=301,L,QSA]

On the SSL virtual host, we then pick up the hostname with the following rewrites:

RewriteEngine On
RewriteRule ^/v/([^\/]+)/admin(.*) /path/to/mail/admin/interface/public_html/$2 [L,E=SCHOOL_HOST:$1]
RewriteRule ^/v/([^\/]+)(.*) /path/to/our/webmail/interface/$2 [E=SCHOOL_HOST:$1]

Hope someone finds this useful, it took me a few hours to find the correct documentation to obtain the HTTP_HOST to use in the RewriteRule.

  • No labels