Это можно решить с помощью регулярного выражения.
Поскольку серверная переменная HTTP_HOST
может содержать только допустимые имена хостов, нам не нужно заботиться о проверке строки, а только о том, чтобы выяснить ее структуру. Поэтому регулярное выражение достаточно простое, но не будет надежно работать в более широком контексте.
И структура 3.2.1
для доменов третьего, второго и первого уровня (верхнего уровня) соответственно.
Домен верхнего уровня может иметь 2+ буквы (например, .com
или .de
) или, концептуально, комбинацию, например .co.uk
. Это не технически ДВУ больше, но я полагаю, что вы на самом деле не заинтересованы в получении co
в качестве домена второго уровня для многих британских имен хостов.
Итак, у нас есть
- необязательно: все виды вещей в начале (поддомен), точка =
^(.*?)\.?
- обязательно: кусок посередине (домен второго уровня), точка =
(\w+)\.
- обязательно: короткий бит (или два коротких) в конце =
(\w{2,}(?:\.\w{2})?)$
Эти три вещи будут захвачены в группах 1, 2 и 3.
Dim re, matches, match
Set re = New RegExp
re.Pattern = "^(.*?)\.?(\w+)\.(\w{2,}(?:\.\w{2})?)$"
Set matches = re.Execute( Request.ServerVariables("HTTP_HOST") )
If matches.Count = 1 Then
Set match = matches(0)
' assuming "images.res.somedomain.co.uk"
Response.Write match.SubMatches(0) & "<br>" ' will be "images.res"
Response.Write match.SubMatches(1) & "<br>" ' will be "somedomain"
Response.Write match.SubMatches(2) & "<br>" ' will be "co.uk"
' assuming "somedomain.com"
Response.Write match.SubMatches(0) & "<br>" ' will be ""
Response.Write match.SubMatches(1) & "<br>" ' will be "somedomain"
Response.Write match.SubMatches(2) & "<br>" ' will be "com"
Else
' You have an IP address in HTTP_HOST
End If