基本语法:location [=||*|^~] /uri/ { … }
= 严格匹配。如果这个查询匹配,那么将停止搜索并立即处理此请求。
~ 为区分大小写匹配(可用正则表达式)
!~为区分大小写不匹配
~* 为不区分大小写匹配(可用正则表达式)
!~*为不区分大小写不匹配
^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式。
简单且快速的 return
return 301 https://example.com$request_uri;
你需要把这段代码放到nginx配置文件的server代码块中,301是永久重定向,你也可以设置成302做一个临时重定向(不建议)。
一个完整的例子:
server {
listen 80;
listen [::]:80;
hostname example.com www.example.com;
return 301 https://example.com$request_uri;
}
一些重定向的例子
http 重定向为 https
return 301 https://$host$request_uri;
统一规范域名
server_name example.com www.example.com example.net www.example.net _;
if ( $host != $server_name ) {
return 301 $scheme://$server_name$request_uri;
}
含 www 和 不含 www 之间的重定向
# non-www to www
if ( $host !~ ^www\. ) {
return 301 $scheme://www.$host$request_uri;
}
# www to non-www
if ( $host ~ ^www\.(?<domain>.+)$ ) {
return 301 $scheme://$domain$request_uri;
}
附录 重定向中常用全局变量
$scheme // HTTP方法(如http,https),如:http
$host // 请求主机头字段,否则为服务器名称,如:blog.fangyongle.com
$server_name // 服务器名称,如:blog.fangyongle.com
$request_uri // 包含请求参数的原始URI,不包含主机名,如:/2018/81.html?a=1&b=2
$request_filename // 当前请求的文件的路径名,由root或alias和URI request组合而成,如:/2013/81.html