2015-03-30 14 views
0

我有一個開發服務器設置,可以通過檢測server_name中的域和子域並設置根來設置快速測試項目。如何使用正則表達式在nginx中將變量分解爲單獨的變量

server_name ~^(?<subdomain>\w*?)?\.?(?<domain>\w+\.\w+)$; 

這個效果很好,讓我雖然設置基於變量$子域和$域

對於特定類型的項目的根路徑,我還需要能夠進一步分裂子域變量根據子域是否包含短劃線將其轉換爲兩個變量。

例如

mysubdomain不應該分裂,但仍然可變$子域

mysubdomain-TN將被分隔成2個變量$子域$版本

回答

4

您需要使您的正則表達式複雜一點:

server_name ~^(?<subdomain>\w*?)(-(?<version>\w*?)?)?\.?(?<domain>\w+\.\w+)$; 

編輯

有幾種方法來調試Nginx的配置,包括debugging logecho module,在某些極端情況下,甚至使用真實debugger。但是,在大多數情況下,向響應添加custom headers就足以獲得必要的信息。

例如,我測試以上使用這種簡單的結構正則表達式:

server { 
    listen 80; 

    server_name ~^(?<subdomain>\w*?)(-(?<version>\w*?)?)?\.?(?<domain>\w+\.\w+)$; 

    # Without this line your browser will try to download 
    # the response as if it were a file 
    add_header Content-Type text/plain; 

    # You can name your headers however you like 
    add_header X-subdomain "$subdomain"; 
    add_header X-domain "$domain"; 
    add_header X-version "$version"; 

    return 200; 
} 

然後我添加的域mydomain.local,mysubdomain-tn.mydomain.local和mysubdomain-tn.mydomain.local到我hosts文件,在打開調試面板(大多數瀏覽器中的F12)的瀏覽器中打開它們,並獲得results

+0

謝謝!我接近了,但我無法弄清楚如何使正則表達式在沒有破折號的情況下工作。如果不能在ngix config中輕鬆檢查變量,則很難進行調試。有小費嗎? – Finglish 2015-03-30 21:03:55

+1

@英式英語,我在原始答案中增加了一些額外的解釋。 – 2015-03-30 22:16:12

+0

再次感謝!我很欣賞這個提示。 – Finglish 2015-03-31 18:38:19

相關問題