Nginx Rewrite規則初探(轉)

Nginx  rewrite(nginx url地址重寫)
Rewrite 主要的功能就是實現URL的重寫,Nginx的Rewrite規則採用Pcre,perl兼容正則表達式的語法規則匹配,若是須要Nginx的Rewrite功能,在編譯Nginx以前,須要編譯安裝PCRE庫。
經過Rewrite規則,能夠實現規範的URL、根據變量來作URL轉向及選擇配置。 
 
if        指令
規則語法:
[plain]  view plain  copy
 
  1. if ($http_user_agent ~MSIE){  
  2. rewrite ^(.*)$/msie/$1 break;  
  3.  }  
  4.   
  5. if (!-f$request_filename){  
  6.   rewrite ^/img/(.*)$/site/$host/images/$1 last;  
  7.   }  


rewrite 語法規則:
變量名:
    變量名能夠使用"="或"!="運算符
     ~  符號表示區分大小寫字母匹配
     ~* 符號表示不區分大小寫字母匹配
     !~ 和 !~ 與~  !~ 相反
     -f 和 !-f   用來判斷文件是否存在
     -d 和 !-d   用來判斷目錄是否存在
     -e 和 !-e   用來判斷文件或目錄是否存在
     -x 和 !-x   用來判斷文件是否能夠執行
      也支持$1到$9位置參數

return指令
示例:,若是訪問的URL以.sh .bash 結尾,返回狀態碼403
[plain]  view plain  copy
 
  1. location ~ .*\.(sh|bash)?$  
  2.  {  
  3.   return 403;  
  4.        }       

     
rewrite指令
[plain]  view plain  copy
 
  1. rewrite指令的最後一項參數爲flag標記,支持的flag標記主要有如下幾種:  
  2. last :至關於Apache裏德(L)標記,表示完成rewrite;  
  3. break;本條規則匹配完成後,終止匹配,再也不匹配後面的規則  
  4. redirect:返回302臨時重定向,瀏覽器地址會顯示跳轉後的URL地址  
  5. permanent:返回301永久重定向,瀏覽器地址欄會顯示跳轉後的URL地址  
  6. last和break用來實現URL重寫,瀏覽器地址欄URL地址不變  

實例:將訪問/b跳轉到/bbs目錄上去:
[plain]  view plain  copy
 
  1. location /b   {  
  2.     autoindex  on;  
  3.    alias /usr/local/nginx/html/redhat;         
  4.    rewrite ^/b/?$ /bbs permanent;  
  5.   
  6.    }  
  7.   location /bbs {  
  8.      autoindex on;  
  9.   alias /usr/local/nginx/html/bbs;  
  10.   }  
rewrite規則編寫實例
1,將原來要訪問/b的目錄重寫爲/bbs
     核心語句:
[plain]  view plain  copy
 
  1. rewrite ^/b/?$ /bbs permannet;  


2,根據不一樣的瀏覽器將獲得不一樣的結果。
[plain]  view plain  copy
 
  1. if ($http_user_agent ~ Firefox) {  
  2.   rewrite ^(.*)$ /firefox/$1 break;  
  3.   }  
  4.   
  5.   if ($http_user_agent ~ MSIE) {  
  6.     rewrite ^(.*)$ /msie/$1 break;  
  7.    }  
  8.   
  9.  if ($http_user_agent ~ Chrome) {  
  10.       rewrite ^(.*)$ /chrome/$1 break;  
  11.  }   
3.防止盜鏈:
根據Referer信息防止盜鏈,代碼以下:
[plain]  view plain  copy
 
  1. location ~*\.(gif|jpg|png|swf|flv)${  
  2. valid_referers none blocked www.cheng.com*.test.com;  
  3. if ($invalid_referer)  
  4.  rewrite ^/(.*) http://www.cheng.com/error.html           
  5.   }  
4.實現域名跳轉:
[plain]  view plain  copy
 
  1. server {  
  2.          listen       80;  
  3.          server_name  cheng.example.com;  
  4.          write ^(.*)$  http://zhang.example.com/$1 permanent;  
  5.          location / {  
  6.              root   html;  
  7.              index  index.html index.htm;  
  8.          } 

 

http://blog.csdn.net/xifeijian/article/details/20955253html

相關文章
相關標籤/搜索