I need to redirect every http://test.com request to http://www.test.com. How can this be done.
In the server block I tried adding
rewrite ^/(.*) http://www.test.com/$1 permanent;
but in browser it says
The page isn't redirecting properly
Firefox has detected that the server is redirecting the request for
this address in a way that will never complete.
my server block looks like
server {
listen 80;
server_name test.com;
client_max_body_size 10M;
client_body_buffer_size 128k;
root /home/test/test/public;
passenger_enabled on;
rails_env production;
#rewrite ^/(.*) http://www.test.com/$1 permanent;
#rewrite ^(.*)$ $scheme://www.test.com$1;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Best way to do what you want is to add another server block:
server {
#implemented by default, change if you need different ip or port
#listen *:80 | *:8000;
server_name test.com;
return 301 $scheme://www.test.com$request_uri;
}
And edit your main server block server_name variable as following:
server_name www.test.com;
Important: New server
block is the right way to do this, if
is evil. You must use locations and servers instead of if
if it's possible. Rewrite
is sometimes evil too, so replaced it with return
.
return 301 http://wwww.test.com$request_uri;
instead of the rewrite - RCCola 2013-02-14 01:17
redirect
then the main server
block or main server
block then the redirect
?
Because I have the same problem, http://stackoverflow.com/questions/35451929/nginx-redirecting-non-www-to-www-with-request-uri-does-not-wor - Jhn 2016-02-17 10:54
301
redirect vs the 302
. You could be stuck with a cached permanent redirect, which makes it very troublesome to change your settings for clients that have already accessed a URL. (I know the OP asked for a 301
, but be sure that's really what you want. - Nick Merrill 2016-02-21 17:35
Similar to another answer here, but change the http in the rewrite to to $scheme like so:
server {
listen 80;
server_name test.com;
rewrite ^ $scheme://www.test.com$request_uri? permanent;
}
And edit your main server block server_name variable as following:
server_name www.test.com;
I had to do this to redirect www.test.com to test.com.
First make sure you have installed Nginx with the HTTP rewrite module. To install this we need to have pcre-library
If the above mentioned are done or if you already have them, then just add the below code in your nginx server block
if ($host !~* ^www\.) {
rewrite ^(.*)$ http://www.$host$1 permanent;
}
To remove www from every request you can use
if ($host = 'www.your_domain.com' ) {
rewrite ^/(.*)$ http://your_domain.com/$1 permanent;
}
so your server block will look like
server {
listen 80;
server_name test.com;
if ($host !~* ^www\.) {
rewrite ^(.*)$ http://www.$host$1 permanent;
}
client_max_body_size 10M;
client_body_buffer_size 128k;
root /home/test/test/public;
passenger_enabled on;
rails_env production;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}