http://wiki.nginx.org/NginxHttpRewriteModule#uninitialized_variable_warn
在使用Nginx 的時候,主要是對Nginx Http Rewrite 模塊進行配置,很多文檔都沒有寫具體的語法,使用起來不能達到靈活的目的,所以整理了一下,官方文檔的幫助文檔:
此模塊使得使用正則表達式來改變UR具備使用正則表達式來改變URI的功能,可根據(jù)變量來進行轉(zhuǎn)向和選擇配置。
如果相關(guān)的指令是在server級別中給出,則將在location之前先執(zhí)行。如果在location模塊有更進一步的重寫規(guī)則,它們依然會被執(zhí)行。如果URI的重寫是由于location里的指令執(zhí)行造成的,那么重寫后的URI將會作為一個新的URI,location模塊會再次進行一次匹配。
這種循環(huán)匹配的次數(shù)不能大于10次,否則nginx返回500錯誤
常用指令:
break
語法:break
默認值:無
作用域:server, location , if
終止當前的規(guī)則匹配,不再執(zhí)行任何的重寫命令。
if
語法:if ( condition ) { ... }
默認值:無
作用域:server, location
檢查condition的真假值。如果condition為真,則大括號里的命令將會被執(zhí)行,并且請求會依照模塊內(nèi)的配置被處理。在if模塊內(nèi)的配置會繼承前面的配置。理解起來就是如果上一作用域有一個root,那么接下來的if模塊也會繼承root這個配置。
以下可用于condition中:
* 變量名稱;若變量值為空"",或字符串值以"0"開始,皆判定為false
* 可使用 = 和 != 操作符比較變量值
* 可使用 ~ 和 ~* 來匹配正則表達式
* ~ 區(qū)分大小寫
* ~* 不區(qū)分大小寫
* !~ 和 !~* 與 ~ 和 ~* 是相反的意思,即為若不匹配正則表達式,結(jié)果為真
* 檢查一個文件是否存在,使用 -f 和 !-f
* 檢查一個目錄是否存在,使用 -d 和 !-d
* 檢查一個文件/目錄/鏈接是否存在,使用 -e 和 !-e
* 檢查文件是否可執(zhí)行文件,使用 -x 和 !-x
正則表達式中的部分可用一對圓括號括起來,依次按照 $1 至 $9 的變量名進行引用。
return
語法:return
默認值:無
作用域:server, location, if
該指令結(jié)束命令執(zhí)行,并向客戶端返回一個狀態(tài)碼。狀態(tài)碼可使用以下值:204, 400, 402-406, 408, 410, 411, 413, 416和500-504。另外,也可發(fā)送非標準的狀態(tài)碼444,從而在不發(fā)送任何頭信息的情況下結(jié)束連接。
rewrite
語法:rewrite regex replacement flag
默認值:無
作用域:server, location, if
該指令依據(jù)正則表達(regex)和替換處的字符串值(replacement)來重寫URI。指令的執(zhí)行次序按照在配置文件中出現(xiàn)的順序。
請注意,regex只匹配相對路徑,而不是整個的URL。如果想要匹配主機名,請參考下面的if表達式:
if ($host ~* www\.(.*)) {
set $host_without_www $1;
rewrite ^(.*)$ http://host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo'
}
標志位(flag)具有結(jié)束命令執(zhí)行的功能。
標志位(flag)可使用以下值:
* last 結(jié)束rewrite指令的執(zhí)行,之后查找響應(yīng)的URI和location
* break 結(jié)束rewrite指令的執(zhí)行
* redirect 以狀態(tài)碼302進行臨時重定向;可在替換的串值以 http:// 開頭時使用它
* permanent 以狀態(tài)碼301進行永久重定向
如果重定向是相對的(即沒有host主機名部分),當重定向時,nginx使用匹配的server_name作為主機名,如果未匹配到相應(yīng)的頭部或頭部信息丟失則使用第一個 server_name 設(shè)置的值。如果沒有設(shè)置 server_name, 那么就使用本地域名。如果你想要設(shè)置nginx成總是使用"Host"頭部,那么請使用帶有通配符 * 的 server_name 設(shè)置。
set
語法:set variable value
默認值:無
作用域:server, location, if
給變量(variable)賦值(value)。對于value的取值,可以使用文本、變量或它們的組合。
uninitialized_variable_warn
語法:uninitialized_variable_warn on\off
默認值:uninitialized_variable_warn on
作用域:http, server, location, if
打開或關(guān)閉對于未初始化變量的警告的日志記錄。