Nginx 里的 rewrite 模块是专门负责静态重写的。
该模块允许使用正则表达式改变 URI,并且根据变量来重定向以及选择配置。
基本用法是:rewrite patten replace flag。patten 是正则表达式,与 patten 匹配的 URL 会被改写为 replace,而 flag 是可选的,可以有如下标志:
last – 完成 rewrite,然后搜索相应的 URI 和位置
break – 中止 rewirte,不再匹配后面的规则
redirect – 返回 code 为 302 的临时重定向
permanent – 返回 code 为 301 的永久重定向
如果域名不是 new.domain.com
就统一转到 https://new.domain.com
server {
listen 443 ssl;
server_name old.domain.com new.domain.com;
if ($host != 'new.domain.com') {
rewrite ^/(.*)$ https://new.domain.com/$1 permanent;
}
}
$host 是 core 模块内部的一个变量,当请求头里不存在 host 属性或者是个空值,$host 则等于 server_name。如果请求头里有 host 属性,那么 $host 等于 host 属性除了端口号的部分,例如 host 属性是 www.example.com,那么 $host 就是 www.example.com。
注意:permanent
是永久重定向,如果重定向的地址错误,由于浏览器会记住它,会一直重定向你设置的地址。这时你可以通过清楚浏览器缓存解决。
(从lio_zero转载并改进,26.09.2023)