Nginx: Redirect both http and https root to subdirectory
I'm attempting to redirect the root domain for both http and https in nginx to the same subdirectory (https):
So e.g.
http://example.com -> https://example.com/subdirectory
https://example.com -> https://example.com/subdirectory
As simple as this seemed to me, I'm struggling to achieve this. I've tried using variations of rewrites and return 301, but always end up with a redirect loop.
My current config (causing the loop):
server {
listen 80;
server_name example.com;
return 301 https://$server_name/subdirectory;
}
server {
listen 443 ssl spdy;
server_name example.com;
return 301 https://$server_name/subdirectory;
}
So basically, i'm trying to redirect to the same subdirectory on https from the root domain, whether the root domain is requested via http or https.
This configuration will do what you want:
server {
listen 80;
server_name example.com;
return 301 https://$server_name/subdirectory;
}
server {
listen 443;
server_name example.com;
location = / {
return 301 https://$server_name/subdirectory;
}
}
The = /
specifiers means a full match, so it matches only the exact root URI of the virtual server.