rewrite相关指令
重定向: rewrite 将用户的访问url,更换为指定的文件。if 语句: if () {}条件判断: ~*|!~|!~*|-f|!-f|-d|-e|-x全局变量:nginx内置变量
rewrite重定向
案例1:server { location /abc { rewrite .* /ccc/bbb/2.html; # rewrite 原来url 新的url permanent(可选); }}#加上permanent加上是永久重定向,url被替换,生成两次请求,服务器只转换了url,客户端重新申请。#不添加permanent,url是老的,服务器内部转换请求。服务器内部转换url,内部转换页面。案例2:#把访问2016的页面重定向给2017,后面页面没有变化,(.*)$原封不动传给$1,后面页面访问一样。server { location /2016 { rewrite ^/2016/(.*)$ ^/2017/$1 permanent; }}
if判断写法
#重定向域名,注意空格server {if ( $host ~* jiangzilong.com ) {rewrite .* http://jd.com; }}#只替换主机地址,后面页面不变server {if ( $host ~* jiangzilong.com ) {rewrite .* http://baidu.com$request_uri; }}#判断客户请求的最后一段是不是目录,如果是目录就执行,把文件分为两段,第一段是前面部分,第二段是判断结尾是否是/,如果是就不传给$2。为的就是客户请求目录的时候后台自行加上/server { if ( -d $request_filename ) { rewrite ^(.*)([^/])$ http://$host$1$2/; }}
案例:
#引用原URL中的信息,重定向只目标的URL#http://alice.qianfeng.com ==> http://www.qianfeng.com/alice# set 定义变量,把获取的头信息赋值给 $user#break跳出循环, 如果访问的域名是www.qianfeng.com,那就停止匹配直接访问。server { if ( $host ~* "^www.qianfeng.com$") { break; } if ( $host ~* "^(.*)\.qianfeng\.com$") { set $user $1; rewrite .* http://www.qianfeng.com/$user; }}#访问服务器中的特殊文件。如:.sh结尾时文件。则返回403操作拒绝错误#return 直接回复为403server { location ~* \.sh$ { return 403; }}
break,last
#break终止匹配,匹配到这里就不用往下面匹配了location /break { rewrite .* /test/break.html break;}#last会把自己隐藏,会访问下一个location。location /last { rewrite .* /test/last.html last;}
如何访问https页面
两种方法server{ listen 80; server_name www.baidu.top; return 301 https://www.baidu.top$request_uri;}rewrite ^(.*) https://$server_name$1 permanent;