Je dois extraire uniquement la partie du second niveau du domaine à partir de request.servervariables ("HTTP_HOST") quelle est la meilleure façon de faire cela?Meilleure façon d'extraire le domaine de second niveau de la variable HTTP_Host dans VBScript
Répondre
Cela peut être résolu par une expression régulière. Comme la variable de serveur HTTP_HOST
ne peut contenir que des noms d'hôte valides, nous n'avons pas besoin de nous préoccuper de pour valider la chaîne, mais seulement pour connaître sa structure. Par conséquent, la regex est assez simple, mais ne fonctionnerait pas de manière fiable dans des contextes plus larges.
Et la structure est 3.2.1
pour les domaines de troisième, deuxième et premier niveau (de premier niveau), respectivement.
Un domaine de premier niveau peut avoir 2+ lettres (comme .com
ou .de
) ou, conceptuellement, une combinaison, comme .co.uk
. Ce n'est pas techniquement un TLD plus, mais je suppose que vous n'êtes pas vraiment intéressé à obtenir co
comme domaine de deuxième niveau pour de nombreux noms d'hôtes britanniques.
Nous avons donc
- en option: toutes sortes de choses au début (sous-domaine), un point =
^(.*?)\.?
- nécessaire: une pièce au milieu (deuxième niveau domaine), un dot =
(\w+)\.
- requise: un court bit (ou deux bits courts) à la fin =
(\w{2,}(?:\.\w{2})?)$
Ces trois éléments seront capturés dans les groupes 1, 2 et 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
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
fonctionne pour ce dont j'ai besoin, mais il ne gère pas .co.uk ou d'autres domaines qui ont deux parties attendues pour le niveau supérieur.
Since HTTP_HOST renvoie uniquement le domaine (à l'exclusion des sous-domaines), vous devriez être en mesure de faire ce qui suit:
'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"
Cela n'a aucun sens. Je ne pense pas que vous ayez compris la question. – Tomalak
Juste vérifié la différence sur un sous-domaine de mon ServerSpace loué et les deux http_host et nom_serveur a renvoyé le nom de domaine, y compris le sous-domaine.
L'en-tête HTPT_HOST n'est pas censé inclure les sous-domaines. Ça n'a pas de sens. Pour analyser le sous-domaine, il doit utiliser l'en-tête SERVER_NAME. Compte tenu de l'URL: http://cdn.domain.co.uk, HTTP_HOST devrait renvoyer "domain.co.uk", tandis que SERVER_NAME devrait renvoyer "cdn.domain.co.uk" – defeated
Bien sûr HTTP_HOST contient des sous-domaines . Allez le chercher. – Tomalak
comme ça? http://www.google.com/search?q=http_host+vs+server_name – defeated