【发布时间】:2019-09-25 20:12:17
【问题描述】:
须知:
我使用 Vultr.com(类似于 DigitalOcean)作为我的 VPS,并使用 Nginx 和 Ubuntu 18.10 x64 运行 1 台服务器。
我正在使用 2 个域:
https://(www).oldsite.orghttps://(www).newsite.org- (www) = 带和不带 www 前缀
- 两个域都有 SSL 证书
我的问题:
目前https://(www)oldsite.org 正在镜像我的https://newsite.org
如果我删除https:// 并且只转到(www)oldsite.org,它会毫无问题地重定向到https://newsite.org。
只有当我添加 https:// 时才会发生镜像。
我的问题:
如何修复我的站点可用脚本以将 oldsite 重定向到 newsite?
我需要如下重定向:
-
https://www.oldsite.org重定向到https://newsite.org -
https://oldsite.org重定向到https://newsite.org
我的脚本:
server {
root /var/www/newsite/public;
server_name newsite.org www.newsite.org oldsite.org www.oldsite.org;
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/newsite.org-0001/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/newsite.org-0001/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = www.newsite.org) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = newsite.org) {
return 301 https://$host$request_uri;
} # managed by Certbot
if ($host = oldsite.org) {
rewrite ^ https://newsite.org$request_uri? permanent;
} # managed by Certbot
if ($host = www.oldsite.org) {
rewrite ^ https://newsite.org$request_uri? permanent;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name newsite.org www.newsite.org oldsite.org www.oldsite.org;
return 404; # managed by Certbot
}
而不是这样做:
if ($host = oldsite.org) {
rewrite ^ https://newsite.org$request_uri? permanent;
} # managed by Certbot
if ($host = www.oldsite.org) {
rewrite ^ https://newsite.org$request_uri? permanent;
} # managed by Certbot
我可以使用类似于此的Wildcard 方法吗:
//NOTE THE * before oldsite.org
if ($host = *oldsite.org) {
rewrite ^ https://newsite.org$request_uri? permanent;
} # managed by Certbot
如果我可以有任何前缀有人可能会输入重定向到https://newsite.org,那将是理想的
希望涵盖所有基础并拥有这些oldsite Url 重定向的每个变体。
https://oldsite.orghttps://www.oldsite.orgwww.oldsite.orgoldsite.org
谢谢!
【问题讨论】:
-
所有
https请求都由第一个server块处理。您应该将其分成两个单独的块,一个用于处理网站,一个用于处理其他所有内容。见this answer
标签: url nginx redirect server url-rewriting