Bunun MVC kullanılarak yapıldığıyla ilgili bir çok konu geziniyor İnternette. Ama web forms ile nasıl yapacağımız hakkında pek bilgi yok. Bu soru üzerine biraz bakındım ve bir yol buldum. Ama bu yöntem için IIS yöneticisine erişebiliyor olmanız lazım. Eğer bir kök veya sanal makineniz varsa yapabilirsiniz. Bunun haricinde hosting firmasından yardım istemeniz gerekebilir.
Bir de şunu söylemem lazım. Bu işleri IIS ve DNS ile yapacağımızdan dikkatli olmalısınız. Hata yaparsanız bazı alan adlarınız veya subdomainleriniz çalışmayabilir. Ayrıca bunu kendim denedim oldu fakat sizde olacağının bir garantisini veremem.
Birincisi DNS kayıtlarına girip siteniz için bir
A kaydı oluşturun. Kayıtta
Domain Name kısmına alan adınızın
example.com olduğunu varsayarsak
*.example.com girmeniz gerekiyor. Tabi sitenizin IP adresi de girilecek.
İkincisi
IIS Manager'ı açıp
Sites düğümünden sitenizi bulup tıklayın. Sağ taraftaki
Actions panelinde
Edit Site bölümünün altındaki
Bindings... seçeneğini açın. Liste açıldığında
Add tuşunu tıklayın. Açılan penceredeki
Type listesinden
http'yi,
IP address listesinden IP adresinizi seçin. Port 80 kalsın.
Host name kısmına birşey yazmayın, Boş bırakın (Aksi halde yazdığınız alan adı ile isteklerdeki alan adları eşleşmeyebilir).
Ok ile kaydedin. Eğer
https kullanıyorsanız bu işlemin aynısını
Type listesinden
https'yi seçerek tekrarlayın.
Artık bundan sonra sunucuda subdomain olarak kayıtlı olanların haricindeki bütün subdomain adı bulunan istekler sitenize varsa Path ve Query String'i de içeren bir adresle gelecektir.
Sitenize yapılan istekleri Global.asax içinde yakalayarak ve / veya routing kullanarak gelen alt alan adına göre işlem yapabilirsiniz. Ya da routing kullanmak istemezseniz sayfalarınızda istek adresinin subdomain kısmını okuyarak da işlem yapılabilir.
Ek:
Kullanırken ortaya çıkan bir durumu ekleyeyim. Bindings kısmında ismi boş bırakarak her IP için sadece bir tane web sitesine tanımlama yapılabiliyor. Ancak IIS 10 kullanıyorsanız Wildcard subdomain kullanılabiliyor. Yani Bindings tanımlarken boş bıraktığımız Host Name kısmına *.example.com gibi bir adres girebiliyoruz. Dolayısıyla aynı IP'de çalışan siteler için ayrı ayrı bu işlemi yapabiliyoruz.
Ek 2:
Yine kullanırken ortaya çıkan bir durum: IIS 10 kullanıp da birinci ektekini yapmıyorsanız veya yapamıyorsanız, sunucuda aynı IP adresini kullanan sitelere yapılan mevcut olmayan subdomain adı bulunan istekler de ilgili siteye yönlendiriliyor ve dolayısıyla adres çubuğunda yanlış adres görülüyor.
Örneğin bu işlemleri example.com için yapmışsanız ve aynı IP numarasını kullanan example.net adresiyle farklı bir site aynı sunucuda yayındaysa blog.example.net şeklinde bir istek example.com'a yönlendiriliyor ve adres blog.example.net şeklinde görülüyor.
Bunun için benim çözümüm, Global.asax dosyasındaki Application_BeginRequest olayında 301 yönlendirmesi yapmak.
void Application_BeginRequest(Object o, EventArgs e)
{
HttpRequest istek = HttpContext.Current.Request;
HttpResponse cevap = HttpContext.Current.Response;
string host = istek.Url.Host;
if (host.IndexOf("example.com") == -1)
{
// Alttaki subdomain çözümlemesi alan adı com.tr gibi bitiyorsa veya
// alt alan adı ali.blog.example.com gibiyse geçersizdir.
// Basit olduğu için burada kullanıyorum. Başka bir yol kullanın.
string sub = "";
string[] parts = host.Split(new char[] { '.' });
if (parts.Length > 2) sub = parts[0] + ".";
cevap.Status = "301 Moved Permanently";
cevap.StatusCode = 301;
cevap.AddHeader("Location",
sub + "example.com" + istek.RawUrl);
cevap.End();
}
}
Başka bir fikri olan varsa ve burada paylaşırsa faydalı olabilir.