I have the following nginx configuration fragment:
server {
listen 80;
server_name mydomain.io;
root /srv/www/domains/mydomain.io;
index index.html index.php;
access_log /var/log/nginx/domains/mydomain.io/access.log;
error_log /var/log/nginx/domains/mydomain.io/error.log;
location ~\.php {
try_files $uri =404;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
}
}
First, how can I make the server block respond to both
http://www.mydomain.io and also http://mydomain.io. Second, I want to force if they come from http://www.mydomain.io to redirect to http://mydomain.io.
Thanks.
According to https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#server-name-if, you should use:
I believe it's better to add two seperate server blocks to avoid unnecessary checking by the
if
block. I also use the $scheme variable so that HTTPS requests will not be redirected to their insecure counterparts.Another way to code it :
It works even with multiple domain names on the same code.
For a generic approach, without having to mention any specific domain or protocol, I have used this quite successfully:
This will redirect: https://www.api.example.com/person/123?q=45 to https://api.example.com/person/123?q=45
On the first question - simply add both domains:
For the second, you'll need this simple redirect: