Лучший способ извлечь домен второго уровня из переменной HTTP_Host в VBScript - PullRequest
2 голосов
/ 13 октября 2008

Мне нужно извлечь только часть домена 2-го уровня из request.servervariables ("HTTP_HOST"), как лучше всего это сделать?

Ответы [ 4 ]

1 голос
/ 13 октября 2008

Это можно решить с помощью регулярного выражения.

Поскольку серверная переменная 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
1 голос
/ 13 октября 2008
If Len(strHostDomain) > 0 Then      
    aryDomain = Split(strHostDomain,".")

    If uBound(aryDomain) >= 1 Then
        str2ndLevel = aryDomain(uBound(aryDomain)-1)
        strTopLevel = aryDomain(uBound(aryDomain))          
        strDomainOnly = str2ndLevel & "." & strTopLevel
    End If
End If

работает для того, что мне нужно, но не обрабатывает домен .co.uk или другие домены, которые имеют две части, ожидаемые для верхнего уровня.

0 голосов
/ 15 октября 2009

Только что проверил разницу в субдомене от моего арендованного серверного пространства, и http_host и server_name сообщили о доменном имени, включая субдомен.

0 голосов
/ 16 октября 2008

Поскольку заголовок HTTP_HOST возвращает только домен (исключая любые субдомены), вы должны быть в состоянии сделать следующее:

'example: sample.com
'example: sample.co.uk
host = split(request.serverVariables("HTTP_HOST"), ".")
host(0) = "" 'clear the "sample" part

extension = join(host, ".") 'put it back together, ".com" or ".co.uk"
...