I see the Nginx HttpRewriteModule documentation has an example to rewrite a www-prefixed domain to a non-www-prefixed domain:
if ($host ~* www\.(.*)) { set $host_without_www $1; rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo' }
How can I do the reverse-- rewrite a non-www-prefixed domain to a www-prefixed domain? I thought maybe I could do something like the following but Nginx doesn't like the nested if statement.
if ($host !~* ^www\.) { # check if host doesn't start with www. if ($host ~* ([a-z0-9]+\.[a-z0-9]+)) { # check host is of the form xxx.xxx (i.e. no subdomain) set $host_with_www www.$1; rewrite ^(.*)$ http://$host_with_www$1 permanent; } }
Also I wanted this to work for any domain name without explicitly telling Nginx to rewrite domain1.com -> www.domain1.com, domain2.com -> www.domain2.com, etc. since I have a large number of domains to rewrite.
The syntax of rewrite directive is: rewrite regex replacement-url [flag]; regex: The PCRE based regular expression that will be used to match against incoming request URI. replacement-url: If the regular expression matches against the requested URI then the replacement string is used to change the requested URI.
As noted in the Nginx documentation, you should avoid using the if
directive in Nginx where possible, because as soon as you have an if
in your configuration your server needs to evaluate every single request to decide whether to match that if
or not.
A better solution would be multiple server directives.
server { listen 80; server_name website.com; return 301 $scheme://www.website.com$request_uri; } server { listen 80; server_name www.website.com; ... }
If you're trying to serve an SSL (HTTPS) enabled site, you got more or less three different options.
if
directive.There is also an option to use SNI, but I'm not sure this is fully supported as of now.
if ($host !~* ^www\.) { rewrite ^(.*)$ http://www.$host$1 permanent; }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With