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 直接回复为403
server {
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;