首頁 > 未分類 > nginx rewrite 指令

:nginx rewrite 指令

2012年9月21日 發表評論 閱讀評論

鸿运彩票app www.chqvd.icu nginx通過ngx_http_rewrite_module??櫓С謚rl重寫、支持if條件判斷,但不支持else。

該??樾枰狿CRE支持,應在編譯nginx時指定PCRE源碼目錄, nginx安裝方法。

nginx rewrite指令執行順序:

1.執行server塊的rewrite指令(這里的塊指的是server關鍵字后{}包圍的區域,其它xx塊類似)
2.執行location匹配
3.執行選定的location中的rewrite指令
如果其中某步URI被重寫,則重新循環執行1-3,直到找到真實存在的文件

如果循環超過10次,則返回500 Internal Server Error錯誤

break指令

語法:break;
默認值:無
作用域:server,location,if

停止執行當前虛擬主機的后續rewrite指令集
break指令實例:

if指令

語法:if(condition){...}
默認值:無
作用域:server,location
對給定的條件condition進行判斷。如果為真,大括號內的rewrite指令將被執行。
if條件(conditon)可以是如下任何內容:

  • 一個變量名;false如果這個變量是空字符串或者以0開始的字符串;
  • 使用= ,!= 比較的一個變量和字符串
  • 是用~, ~*與正則表達式匹配的變量,如果這個正則表達式中包含},;則整個表達式需要用" 或' 包圍
  • 使用-f ,!-f 檢查一個文件是否存在
  • 使用-d, !-d 檢查一個目錄是否存在
  • 使用-e ,!-e 檢查一個文件、目錄、符號鏈接是否存在
  • 使用-x , !-x 檢查一個文件是否可執行

if指令實例

return指令

語法:return code;

return code URL;

return URL;
默認值:無
作用域:server,location,if

停止處理并返回指定狀態碼(code)給客戶端。
非標準狀態碼444表示關閉連接且不給客戶端發響應頭。
從0.8.42版本起,return 支持響應URL重定向(對于301,302,303,307),或者文本響應(對于其他狀態碼).
對于文本或者URL重定向可以包含變量

rewrite指令

語法:rewrite regex replacement [flag];
默認值:無
作用域:server,location,if
如果一個URI匹配指定的正則表達式regex,URI就按照replacement重寫。
rewrite按配置文件中出現的順序執行。flags標志可以停止繼續處理。
如果replacement以"//"或"https://"開始,將不再繼續處理,這個重定向將返回給客戶端。
flag可以是如下參數
last 停止處理后續rewrite指令集,然后對當前重寫的新URI在rewrite指令集上重新查找。
break 停止處理后續rewrite指令集,并不在重新查找,但是當前location內剩余非rewrite語句和location外的的非rewrite語句可以執行。
redirect 如果replacement不是以// 或https://開始,返回302臨時重定向
permant 返回301永久重定向
最終完整的重定向URL包括請求scheme(//,https://等),請求的server_name_in_redirect和?port_in_redirec三部分 ,說白了也就是http協議 域名 端口三部分組成。

rewrite實例

如果這些rewrite放到?“/download/” location如下所示, 那么應使用break而不是last?, 使用last將循環10次匹配,然后返回 500錯誤:

對于重寫后的URL(replacement)包含原請求的請求參數,原URL的?后的內容。如果不想帶原請求的參數 ,可以在replacement后加一個問號。如下,我們加了一個自定義的參數user=$1,然后在結尾處放了一個問號?,把原請的參數去掉。

如果正則表達regex式中包含?“}” 或 “;”, 那么整個表達式需要用雙引號或單引號包圍.

rewrite_log指令


語法:rewrite_log on|off;
默認值:rewrite_log off;
作用域:http,server,location,if
開啟或關閉以notice級別打印rewrite處理日志到error log文件。

nginx打開rewrite log例子

rewrite_log on;
error_log logs/xxx.error.log notice;

1.打開rewrite on
2.把error log的級別調整到 notice

set指令


語法:set variable value;
默認值:none
作用域:server,location,if
定義一個變量并賦值,值可以是文本,變量或者文本變量混合體。

uninitialized_variable_warn指令


語法:uninitialized_variable_warn on | off;
默認值:uninitialized_variable_warn on
作用域:http,server,location,if

控制是否輸出為初始化的變量到日志

掃碼聯系我

加我微信

除非注明,本站文章均為: 鸿运彩票app原創,轉載請注明本文地址: //www.chqvd.icu/216.html

--完--

分類: 未分類 標簽:
  1. 2016年6月6日13:48 | #1

    nginx經過rewrite后,是否注入remote_addr之類變量會被重新插值?

  2. 2015年11月19日15:01 | #2

    學習了,看到博主的博客收獲很大,我是一個對nginx源碼十分感興趣的服務端開發,這是我博客中對 nginx 源碼的一些總結://techlog.cn/article/list/10182612
    不知道是否可以加個友鏈,交個朋友,有問題互相交流學習,謝謝

  3. 2014年11月22日16:41 | #3

    在學習。rewrite學著很辛苦啊。如何測試呢。

  4. nginx的困惑
    2012年12月11日14:10 | #4

    nginx遇到url中特殊字符時的問題.我有這樣一段配置 ,正則表達式是用來匹配//hostname/ep,/originalserver/img/1k.jpg這樣的url。$1對應上面的 ep, (有個逗號),且$1的內容是動態增長的。 $2對應上面的originalserver/img/1k.jpg.配置如下:location ~* ^/(.*[,]+)/(.*)$ { if ($request_uri ~ ^/(.*[,]+)/(.*)$ ){ set $route_information $1; set_unescape_uri $squid_url $2; # echo $squid_url; rewrite ^(.*)$ /$squid_url? break; } }nginx處理正常的url上面的配置都沒有問題.但是當nginx處理的url 中含有特殊的字符的時候,會對url進行解碼.比如url://hostname/ep,/originalserver/img/good%2Ftt.jpg.在rewrite 的上面echo $squid_url; 我輸出的url特殊字符都是正常的沒有變化 good%2Ftt.jpg.但是rewrite到后臺的url卻變成了good%252Ftt.jpg

    • 2012年12月14日17:02 | #5

      url是不能含有%好的,如果有百分號都會被轉義成%25

  1. 2014年4月11日17:39 | #1
  2. 2014年4月22日16:42 | #2
  3. 2014年5月25日18:07 | #3
  4. 2015年4月9日21:26 | #4
  5. 2015年6月17日17:33 | #5
  6. 2015年6月20日20:06 | #6
  7. 2015年6月30日16:26 | #7
  8. 2015年6月30日17:27 | #8
  9. 2015年10月18日20:33 | #9
  10. 2016年1月23日17:27 | #10
  11. 2016年3月7日15:08 | #11
  12. 2016年4月18日23:01 | #12
  13. 2016年4月22日12:20 | #13
  14. 2016年5月6日02:04 | #14
  15. 2016年6月27日14:34 | #15
  16. 2016年7月13日09:36 | #16
  17. 2016年8月15日16:58 | #17
  18. 2016年8月17日18:06 | #18
  19. 2016年9月5日14:23 | #19
  20. 2016年11月6日10:53 | #20
  21. 2016年11月23日00:49 | #21
  22. 2017年1月3日17:29 | #22
  23. 2017年1月19日19:40 | #23
  24. 2017年3月30日16:57 | #24
  25. 2017年8月4日23:46 | #25
  26. 2017年9月18日18:52 | #26
  27. 2017年11月2日14:28 | #27
  28. 2018年2月3日13:38 | #28
  29. 2018年6月23日06:51 | #29
  30. 2019年2月8日01:00 | #30
  31. 2019年2月8日01:28 | #31
  32. 2019年2月8日21:28 | #32
  33. 2019年3月12日12:43 | #33
  34. 2019年4月17日10:54 | #34
  35. 2019年5月25日22:54 | #35
  36. 2019年5月26日02:42 | #36
  37. 2019年6月13日10:58 | #37
  38. 2019年8月17日15:58 | #38

球探体育比分在国外能用吗 什么彩票计划软件好用 官网mg平台 秒速时时彩稳赚技巧大小 重庆时时彩500本金稳赚 体育彩票网上如何投注 老时时360记录 广西快乐十分计划软件手机版 北赛车pk10直播链接 pt电子平台pt电子平台 pk10单双稳赚技巧 时时彩骗局 哈尔滨p62开奖结果 北京时时每天开多少 捕鱼达人4 重庆后三组六稳赚方法