關于 Nginx 變量的另一個常見誤區是認為變量容器的生命期,是與 <code>location</code> 配置塊綁定的。其實不然。我們來看一個涉及“内部跳轉”的例子:
但如果我們從用戶端直接通路 <code>/bar</code> 接口,就會得到空的 <code>$a</code> 變量的值,因為它依賴于 <code>location /foo</code> 來對 <code>$a</code>進行初始化。
從上面這個例子我們看到,Nginx 變量值容器的生命期是與目前正在處理的請求綁定的,而與 <code>location</code> 無關。
然後在指令行上使用各種參數組合去請求這個 <code>/test</code> 接口:
其實 <code>$arg_name</code> 不僅可以比對 <code>name</code> 參數,也可以比對 <code>NAME</code> 參數,抑或是 <code>Name</code>,等等:
Nginx 會在比對參數名之前,自動把原始請求中的參數名調整為全部小寫的形式。
現在我們再看一下效果:
空格果然被解碼出來了!
這個有問題的配置會讓 Nginx 在啟動的時候報出一條令人匪夷所思的錯誤: