rewrite相关指令
  1. 重定向: rewrite 将用户的访问url,更换为指定的文件。
  2. if 语句: if () {}
  3. 条件判断: ~*|!~|!~*|-f|!-f|-d|-e|-x
  4. 全局变量:nginx内置变量

rewrite重定向
  1. 案例1
  2. server {
  3. location /abc {
  4. rewrite .* /ccc/bbb/2.html;
  5. # rewrite 原来url 新的url permanent(可选);
  6. }
  7. }
  8. #加上permanent加上是永久重定向,url被替换,生成两次请求,服务器只转换了url,客户端重新申请。
  9. #不添加permanent,url是老的,服务器内部转换请求。服务器内部转换url,内部转换页面。
  10. 案例2
  11. #把访问2016的页面重定向给2017,后面页面没有变化,(.*)$原封不动传给$1,后面页面访问一样。
  12. server {
  13. location /2016 {
  14. rewrite ^/2016/(.*)$ ^/2017/$1 permanent;
  15. }
  16. }

if判断写法
  1. #重定向域名,注意空格
  2. server {
  3. if ( $host ~* jiangzilong.com ) {
  4. rewrite .* http://jd.com;
  5. }
  6. }
  7. #只替换主机地址,后面页面不变
  8. server {
  9. if ( $host ~* jiangzilong.com ) {
  10. rewrite .* http://baidu.com$request_uri;
  11. }
  12. }
  13. #判断客户请求的最后一段是不是目录,如果是目录就执行,把文件分为两段,第一段是前面部分,第二段是判断结尾是否是/,如果是就不传给$2。为的就是客户请求目录的时候后台自行加上/
  14. server {
  15. if ( -d $request_filename ) {
  16. rewrite ^(.*)([^/])$ http://$host$1$2/;
  17. }
  18. }

案例:
  1. #引用原URL中的信息,重定向只目标的URL
  2. #http://alice.qianfeng.com ==> http://www.qianfeng.com/alice
  3. # set 定义变量,把获取的头信息赋值给 $user
  4. #break跳出循环, 如果访问的域名是www.qianfeng.com,那就停止匹配直接访问。
  5. server {
  6. if ( $host ~* "^www.qianfeng.com$") {
  7. break;
  8. }
  9. if ( $host ~* "^(.*)\.qianfeng\.com$") {
  10. set $user $1;
  11. rewrite .* http://www.qianfeng.com/$user;
  12. }
  13. }
  14. #访问服务器中的特殊文件。如:.sh结尾时文件。则返回403操作拒绝错误
  15. #return 直接回复为403
  16. server {
  17. location ~* \.sh$ {
  18. return 403;
  19. }
  20. }

break,last
  1. #break终止匹配,匹配到这里就不用往下面匹配了
  2. location /break {
  3. rewrite .* /test/break.html break;
  4. }
  5. #last会把自己隐藏,会访问下一个location。
  6. location /last {
  7. rewrite .* /test/last.html last;
  8. }

如何访问https页面
  1. 两种方法
  2. server{
  3. listen 80
  4. server_name www.baidu.top;
  5. return 301 https://www.baidu.top$request_uri;
  6. }
  7. rewrite ^(.*) https://$server_name$1 permanent;