请教一个 nginx rewrite 问题,www->non-www 强制 https

2016-02-07 10:24:01 +08:00
 Bac2
跳转需求是这样的
强制所有连接走 https
且带 www301 到不带 www
我的配置
server {
listen 80;
server_name abc.com www.abc.com;
return 301 https://abc.com$request_uri;
}
server {
listen 443 ssl;
server_name abc.com;
ssl_certificate ***;
ssl_certificate_key ***;
*****
}

现在的状态是
http://www.abc.com
http://abc.com
跳转到 https://abc.com
可是 https://www.abc.com 不跳转
第一个 server 内加 listen 443 ssl;出错(ノ=Д=)ノ┻━┻
4996 次点击
所在节点    NGINX
28 条回复
rainy3636
2016-02-07 10:29:06 +08:00
DNS 里把 www cname 到 abc.com
Bac2
2016-02-07 10:35:09 +08:00
@rainy3636 让我冷静一下(#゚Д゚)我把 DNS 这事忘了,从昨天折腾到现在了→_→
现在的问题是如何用 nginx rewrite 实现,毕竟都折腾那么长时间了≥﹏≤
secondwtq
2016-02-07 10:36:44 +08:00
server {
listen 80;
listen 443 ssl;

server_name www.abc.com;
ssl_certificate ***;
ssl_certificate_key ***;

return 301 https://abc.com$request_uri;
}
server {
listen 80;

server_name abc.com

return 301 https://abc.com$request_uri;
}

这样试试呢
babytomas
2016-02-07 10:42:24 +08:00
给你一个思路啊,在 nginx.conf 最底部加一个 listen 80 ,但是不加 server_name ,把这个层全部重定向 https://abc.com

然后不要把 www.abc.com 加入到其他配置的 server_name
Bac2
2016-02-07 10:48:49 +08:00
@secondwtq 还是不行→_→
ys0290
2016-02-07 10:51:14 +08:00
你缺一个监听 443 www 的
Bac2
2016-02-07 10:51:57 +08:00
@babytomas https://www.*依旧不跳转 @_@
Bac2
2016-02-07 10:56:06 +08:00
@ys0290 网页可能暂时无法连接,或者它已永久性地移动到了新网址。
ys0290
2016-02-07 10:59:02 +08:00
看 log 呢?
jalena
2016-02-07 11:01:13 +08:00
```sh
if ($host != 'www.abc.com.cn' ) {
rewrite ^/(.*)$ https://www.abc.com.cn/$1 permanent;
}
```
imlonghao
2016-02-07 11:11:58 +08:00
@rainy3636 说 CNAME 的你真的是认真的么?
imlonghao
2016-02-07 11:13:50 +08:00
独立做一个 www.abc.com 的跳转到 abc.com
imlonghao
2016-02-07 11:15:21 +08:00
server {
listen 80;
server_name abc.com www.abc.com;
return 301 https://abc.com$request_uri;
}
server {
listen 443 ssl;
server_name www.abc.com;
ssl_certificate ***;
ssl_certificate_key ***;
*****
return 301 xxxxxxxxxx;
}
server {
listen 443 ssl;
server_name abc.com;
ssl_certificate ***;
ssl_certificate_key ***;
*****
}

大概就是这个样子了...
printempw
2016-02-07 11:16:38 +08:00
if host name = www.xx 啊,等下贴配置
printempw
2016-02-07 11:18:10 +08:00
if ($host = www.prinzeugen.net) {
rewrite ^/(.*)$ $scheme://prinzeugen.net/$1 permanent;
}
放 443 server 块里
imlonghao
2016-02-07 11:22:08 +08:00
winterbells
2016-02-07 11:23:43 +08:00
@rainy3636 应该是显性 DNS 转发吧,相当于直接 301 转发。 cnname 是解析到 ip 上
Bac2
2016-02-07 11:40:19 +08:00
@imlonghao 在 www 的 server 块里加上完整的 ssl 配置成功了。。。
shyling
2016-02-07 12:00:25 +08:00
表示我是借助 if 实现的:人访问强制 301 到 https ,蜘蛛访问强制 302 到 http
shyling
2016-02-07 12:02:43 +08:00
try_files 在 core_module,if 在 rewrite_module 。并不是特别需要在意

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/255730

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX