Asp classic 从VBScript中的HTTP_主机变量提取二级域的最佳方法

Asp classic 从VBScript中的HTTP_主机变量提取二级域的最佳方法,asp-classic,vbscript,Asp Classic,Vbscript,我只需要从request.servervariables(“HTTP_主机”)中提取域的第二级部分,最好的方法是什么 If Len(strHostDomain) > 0 Then aryDomain = Split(strHostDomain,".") If uBound(aryDomain) >= 1 Then str2ndLevel = aryDomain(uBound(aryDomain)-1) strTopLeve

我只需要从request.servervariables(“HTTP_主机”)中提取域的第二级部分,最好的方法是什么

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或具有两个顶级部分的其他域。

这可以通过正则表达式解决

由于
HTTP\u HOST
server变量只能包含有效的主机名,因此我们不需要验证字符串,只需要找出其结构即可。因此,regex保持相当简单,但在更广泛的上下文中无法可靠地工作

第三级、第二级和第一级(顶级)域的结构分别为
3.2.1

顶级域可以有2个以上的字母(如
.com
.de
),或者从概念上说,可以是一个组合,如
.co.uk
。从技术上讲,这不再是TLD,但我认为您对将
co
作为许多英国主机名的二级域名并不感兴趣

所以我们有

  • 可选:开始时的所有类型(子域),一个点=
    ^(.*)\?
  • < LI>要求:中间的一个段落(第二级域),DOT= <代码>(\W+)\<代码>
  • 必需:末尾的一个短位(或两个短位)=
    (\w{2,}(?:\。\w{2})?)$
这三样东西将在第1组、第2组和第3组中捕获

Dim re,匹配,匹配
Set re=New RegExp
re.Pattern=“^(.*)\?(\w+)\(\w{2,}(?:\。\w{2})$”
Set matches=re.Execute(Request.ServerVariables(“HTTP\U主机”))
如果匹配。计数=1,则
设置匹配=匹配(0)
'假设“images.res.somedomain.co.uk”
Response.Write match.SubMatches(0)和“
”将是“images.res” Response.Write match.submatch(1)和“
”将是“somedomain” 响应。写入匹配。子匹配(2)和“
”将为“co.uk” '假设“somedomain.com” 响应。写入匹配。子匹配(0)和“
”将为“” Response.Write match.submatch(1)和“
”将是“somedomain” Response.Write match.submatch(2)和“
”将是“com” 其他的 '您在HTTP_主机中有一个IP地址 如果结束
由于HTTP\U主机头仅返回域(不包括任何子域),因此您应该能够执行以下操作:

'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"

刚刚检查了我租用的serverspace的子域上的差异,http_主机和server_名称都报告了包括子域在内的域名。

这是胡说八道。我认为您不理解这个问题。HTPT_主机头不应该包括子域。这是胡说八道。要解析子域,他需要使用服务器名称头。给定url:,HTTP_主机应返回“domain.co.uk”,而服务器名称应返回“cdn.domain.co.uk”