我只需要从 request.servervariables("HTTP_HOST") 中提取域的第二级部分,最好的方法是什么?
brian
问问题
2449 次
4 回答
1
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 或其他具有顶级预期的两个部分的域。
于 2008-10-13T05:00:05.100 回答
1
这可以通过正则表达式来解决。
由于HTTP_HOST
服务器变量只能包含有效的主机名,我们不需要关心验证字符串,只需要找出它的结构。因此,正则表达式保持相当简单,但在更广泛的上下文中无法可靠地工作。
该结构3.2.1
分别用于第三、第二和第一级(顶级)域。
顶级域可以有 2 个以上的字母(如.com
或.de
),或者从概念上讲是一个组合,如.co.uk
. 从技术上讲,这不再是 TLD,但我认为您对获得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
于 2008-10-13T07:17:33.263 回答
0
刚刚检查了我租用的服务器空间的子域的差异,http_host 和 server_name 都报告了包括子域在内的域名。
于 2009-10-15T10:13:29.163 回答
-1
由于 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"
于 2008-10-16T01:48:50.023 回答