When building web applications that need to handle dynamic subdomains (like xyz.example.com, abc.example.com) while serving content from the root domain (example.com), a wildcard DNS configuration becomes essential. This is particularly common in SaaS platforms, multi-tenant applications, or user-customized portals.
Most shared hosting providers allow these basic DNS record types:
A (Address) Records CNAME (Canonical Name) Records MX (Mail Exchange) Records AAAA (IPv6 Address) Records TXT (Text) Records
1. Create a wildcard A record pointing to your server IP:
*.mydomain.com. 3600 IN A 192.0.2.1
2. Alternatively, set up a wildcard CNAME if your host supports it:
*.mydomain.com. 3600 IN CNAME mydomain.com.
In your Global.asax.cs or middleware:
protected void Application_BeginRequest(object sender, EventArgs e) { var host = Request.Url.Host; if (host.Contains(".") && !host.StartsWith("www.")) { string subdomain = host.Split('.')[0]; // Process subdomain logic Context.RewritePath("/?subdomain=" + subdomain); } }
For IIS hosts, web.config rewrite rules:
<rule name="Subdomain Redirect"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^([^.]+)\.mydomain\.com$" /> </conditions> <action type="Rewrite" url="/subdomainhandler?name={C:1}" /> </rule>
Use dig or nslookup to verify:
dig any-subdomain.yourdomain.com
Should return the same IP as your root domain.
Some shared hosts restrict wildcard DNS due to security policies. If unavailable:
- Request support to enable it
- Use a CNAME workaround if possible
- Consider upgrading to VPS for full DNS control
Wildcard DNS can expose your application to:
- Subdomain takeover risks
- Phishing vulnerabilities
- SEO duplicate content issues
Mitigate these with proper validation and canonical URL handling.
For high-traffic sites:
// Cache subdomain resolutions MemoryCache.Default.Add( "subdomain_" + subdomain, processedData, DateTime.Now.AddHours(1) );
When working with dynamic subdomains in a shared hosting environment, you need to configure two key components:
- DNS-level wildcard record (*.mydomain.com)
- Application-level routing in ASP.NET
Most shared hosts support wildcard DNS through either:
# For IPv4: *.mydomain.com. 3600 IN A 192.0.2.1 # Alternative CNAME approach: *.mydomain.com. 3600 IN CNAME mydomain.com.
Check your host's DNS management panel for these options. Some hosts may restrict wildcard records, so you might need to:
- Contact support to enable wildcard subdomains
- Manually add common subdomains (www, xyz, abc) if wildcards aren't allowed
In your Global.asax or Startup.cs:
protected void Application_BeginRequest(object sender, EventArgs e) { string host = Request.Url.Host; if (host.StartsWith("www.")) { // Handle www subdomain } else if (host != "mydomain.com") { // Extract subdomain string subdomain = host.Split('.')[0]; Context.Items["Subdomain"] = subdomain; // Optional: Rewrite URL internally HttpContext.Current.RewritePath( virtualPath: "/SubdomainHandler.aspx", query: $"sub={subdomain}", pathInfo: String.Empty); } }
If you have access to web.config:
<system.webServer> <rewrite> <rules> <rule name="Wildcard Subdomain"> <match url=".*" /> <conditions> <add input="{HTTP_HOST}" pattern="^([^\.]+)\.mydomain\.com$" /> </conditions> <action type="Rewrite" url="/SubdomainHandler?sub={C:1}" /> </rule> </rules> </rewrite> </system.webServer>
Use these tools to verify your setup:
nslookup xyz.mydomain.com
curl -I http://test.mydomain.com
- Browser developer tools (Network tab)
For high-traffic sites:
- Cache subdomain resolution results
- Implement proper 404 handling for invalid subdomains
- Consider database optimization for subdomain-specific content
When implementing wildcard DNS:
// Always validate subdomains string safeSubdomain = Regex.Replace(subdomain, @"[^a-zA-Z0-9-]", ""); if (string.IsNullOrEmpty(safeSubdomain)) { throw new HttpException(400, "Invalid subdomain"); }