Nginx

帶有正則表達式的 nginx 動態伺服器名不適用於 co.uk

  • June 11, 2015

我正在嘗試設置一個 nginx 伺服器,它可以從域的文件夾中動態載入內容。為此,我在伺服器名稱中使用正則表達式,如下所示:

server_name ((?<subdomain>.+)\.)?(?<domain>.+)\.(?<tld>.*);

這將為 nginx 創建 3 個變數以供以後使用,例如在使用以下 url 時:test.foo.example.com這將評估為:

  1. $subdomain = test.foo
  2. $domain = 範例
  3. $tld = com

使用 co.uk 頂級域時會出現問題。在這種情況下,當使用 urltest.foo.example.co.uk時,它將評估為:

  1. $ 子域 = test.foo.cedira
  2. $domain = co
  3. $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>.*)$;

引用自:https://serverfault.com/questions/547555