Я пытаюсь настроить сервер nginx, который динамически загружает контент из папки для домена. Для этого я использую регулярные выражения в имени сервера, например:
server_name ((?<subdomain>.+)\.)?(?<domain>.+)\.(?<tld>.*);
Это создаст 3 переменные, которые nginx будет использовать позже, например, при использовании следующего URL: test.foo.example.com
это будет оценивать:
Проблема возникает при использовании домена верхнего уровня co.uk. В этом случае при использовании URL test.foo.example.co.uk
он будет оценивать:
Как мне отредактировать регулярное выражение, чтобы оно работало и на co.uk?
Это может проверить часть www, а также получить только первый захват как второй захват поддомена как домен, а остальное как хост-домен:
server_name ~^(www\.)?((?<subdomain>.+?)\.)?((?<domain>.+?)\.)?(?<host_domain>.+)\.(?<tld>co.uk)$ ~^(www\.)?((?<subdomain>.+?)\.)?((?<domain>.+?)\.)?(?<host_domain>.+)\.(?<tld>.*)$;
Я обнаружил, что можно определить несколько server_names, поэтому я просто сделал два регулярных выражения в качестве server_name, если первое не сработает, оно автоматически перейдет ко второму.
server_name ~^((?<subdomain>.+)\.)?(?<domain>.+)\.(?<tld>co.uk)$ ~^((?<subdomain>.+)\.)?(?<domain>.+)\.(?<tld>.*)$;
Я предполагаю, что это также можно сделать с помощью одного регулярного выражения, я все еще хотел бы знать, как, но пока я буду использовать это решение.