Nginx
帶有正則表達式的 nginx 動態伺服器名不適用於 co.uk
我正在嘗試設置一個 nginx 伺服器,它可以從域的文件夾中動態載入內容。為此,我在伺服器名稱中使用正則表達式,如下所示:
server_name ((?<subdomain>.+)\.)?(?<domain>.+)\.(?<tld>.*);
這將為 nginx 創建 3 個變數以供以後使用,例如在使用以下 url 時:
test.foo.example.com
這將評估為:
- $subdomain = test.foo
- $domain = 範例
- $tld = com
使用 co.uk 頂級域時會出現問題。在這種情況下,當使用 url
test.foo.example.co.uk
時,它將評估為:
- $ 子域 = test.foo.cedira
- $domain = co
- $tld = 英國
如何編輯正則表達式使其也適用於 co.uk?
我發現可以定義多個 server_name,所以我簡單地將兩個正則表達式作為 server_name,如果第一個失敗,它將自動轉到第二個。
server_name ~^((?<subdomain>.+)\.)?(?<domain>.+)\.(?<tld>co.uk)$ ~^((?<subdomain>.+)\.)?(?<domain>.+)\.(?<tld>.*)$;
我猜它也可以用一個正則表達式來完成,我仍然想知道如何,但現在我將使用這個解決方案。
這能夠檢查 www 部分,並且它僅將第一個擷取作為子域,第二個擷取作為域,其餘作為主機域:
server_name ~^(www\.)?((?<subdomain>.+?)\.)?((?<domain>.+?)\.)?(?<host_domain>.+)\.(?<tld>co.uk)$ ~^(www\.)?((?<subdomain>.+?)\.)?((?<domain>.+?)\.)?(?<host_domain>.+)\.(?<tld>.*)$;