Nginx

Nginx:將 http 和 https 根目錄重定向到子目錄

  • November 30, 2020

我正在嘗試將 nginx 中 http 和 https 的根域重定向到同一子目錄(https):

所以例如

http://example.com -> https://example.com/subdirectory

https://example.com -> https://example.com/subdirectory

在我看來,這很簡單,但我正在努力實現這一目標。我嘗試過使用各種重寫並返回 301,但總是以重定向循環結束。

我目前的配置(導致循環):

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;
   }

所以基本上,我試圖從根域重定向到 https 上的同一子目錄,無論根域是通過 http 還是 https 請求的。

此配置將執行您想要的操作:

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;
   }
}

說明= /符表示完全匹配,因此它只匹配虛擬伺服器的確切根 URI。

顯然,如果您不從 ssl vhost 的此行為中排除 location 子目錄,它將不起作用。

server {

   listen 80;
   server_name example.com;

   return 301 https://$server_name/subdirectory;

}

server {

   listen 443 ssl spdy;
   server_name example.com;

   location /subdirectory {
       # Your stuff
   }

   location = / {
       return 301 https://$server_name/subdirectory;
   }

}

引用自:https://serverfault.com/questions/631989