Asp classic 从VBScript中的HTTP_主机变量提取二级域的最佳方法
我只需要从request.servervariables(“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
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})?)$
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”