2009-09-05 85 views
1

我有一个.net站点和几个带有通配符dns指向它的域。我用伪子域名系统,其中i提取的子域名网址从下面的代码在子域名中使用。的子域名asp.net站点

public static string GetSubdomain() 
{ 
    string domain = HttpContext.Current.Request.Url.Host; 
    if (domain.Substring(0, 4).ToLower() == "www.") // if www exists in the url such as www.subdomain.acme.com 
     domain = domain.Remove(0, 4); 
    return domain; 
} 

代码有一定的局限性。我无法允许用户创建网站,如subdomain.subdomain.domain.com,但subdomain.domain.com。

由于我使用的differend tld(如site.net,site.mobi,site.co.uk)我找不到一个可靠的方法来建立子域。在里面。

任何人都有我可以使用的片段?

回答

0

您可以提取名称的所有部分用一个简单的正则表达式

using System.Text.RegularExpressions;  
void MatchRegex() 
{ 
     Regex regex = new Regex(@"(?<subdomain>([^\.]*[\.])*)(?<domain>[^\.]+)[\.](?<tld>[^\.]+)$"); 
     string input = @"sub1.sub2.ttt.com"; 

     Match match = regex.Match(input); 
     if(match != null) 
     { 

      string subDomain = match.Groups["subdomain"].Value; 
      string domain = match.Groups["domain"].Value; 
      string tld = match.Groups["tld"].Value; 
     } 
} 
+0

我认为会失败的。 co.uk和类似的域名。 – Lazarus 2009-09-05 17:38:09

+0

对。如果顶级域名有“。”,它将会失败。 :( – 2009-09-05 17:42:24

+0

是的,它的确如果域名是.co.uk – nLL 2009-09-05 17:42:43

0

我会忍不住去简单,使用这样的:

 string fqdn = "test.mydomain.co.uk"; 
     string[] validDomains = new string[] { "mydomain.co.uk", "mydomain.com", "mydomain.mobi" }; 

     char[] matchChars = new char[] { '.' }; 

     string[] stringSegments = fqdn.Split(matchChars, 2); 
     if (validDomains.Contains(stringSegments[1])) 
     { 
      Console.WriteLine("Domain Valid"); 
     } 
     else 
     { 
      Console.WriteLine("Domain Invalid"); 
     }