چرا باید از دامنه بدون www استفاده کنیم؟
مهمترین دلیل برای حذف www به دامنه یا افزودن آن به دامنه رعایت اصول سئو است زیرا یکی از قوانین فنی سئو این است که هر مطلب باید دارای یک لینک باشد. به دو url زیر توجه کنید.
هر دو url یک صفحه را باز می کنند ولی موتورهای جستجو این دو را لینک های مختلفی در نظر می گیرند که یک مطلب را نمایش می دهند. اگر ما چندین url داشته باشیم که یک محتوا را نمایش بدهند موتورهای جستجو برای ما نمره منفی در نظر می گیرند که باعث می شود در نتایج جستجو جایگاه پایین تری داشته باشیم.
تفاوت استفاده از www و nonwww چیست؟
استفاده از www در دامنه
اگر سایت شما با www بالا بیاید کوکی هایی که توسط مرورگرها ذخیره می شوند برای تمامی ساب دامین ها هم قابل استفاده است و معمولا سایت های بزرگی که که دارای تعداد زیادی ساب دامنه هستند از www در سایت خود استفاده می کنند.
استفاده از nonwww در دامنه
اگر www را از دامنه خود حذف کنید مرورگرها برای هر ساب دامنه کوکی های جداگانه را ذخیره می کنند و ممکن است در برخی از سناریوها این روش ناکارآمد باشد.
چگونه www را از دامنه حذف کنیم؟
برای حذف www در asp.net core باید از AspNetCore.Rewrite استفاده کنیم. برای این منظور یک کلاس با نام NonWwwRule به پروژه خود اضافه کنید و کد زیر را در آن بنویسید.
public class NonWwwRule : IRule
{
public void ApplyRule(RewriteContext context)
{
var req = context.HttpContext.Request;
var currentHost = req.Host;
if (currentHost.Host.StartsWith("www."))
{
var newHost = new HostString(currentHost.Host.Substring(4), currentHost.Port ?? 80);
var newUrl = new StringBuilder().Append("http://").Append(newHost).Append(req.PathBase).Append(req.Path).Append(req.QueryString);
context.HttpContext.Response.Redirect(newUrl.ToString(), true);
context.Result = RuleResult.EndResponse;
}
}
}
سپس در فایل startup.cs باید از این کلاس استفاده کنیم.
var options = new RewriteOptions().AddRedirectToHttpsPermanent();
options.Rules.Add(new NonWwwRule());
app.UseRewriter(options);
چگونه www را به دامنه اضافه کنیم؟
برای افزودن www به دامنه خود یک کلاس دیگر به نام RedirectToWwwRule به پروژه اضافه کنید و کد زیر را به آن اضافه کنید.
public class RedirectToWwwRule : IRule
{
public virtual void ApplyRule(RewriteContext context)
{
var req = context.HttpContext.Request;
if (req.Host.Host.Equals("domain.com", StringComparison.OrdinalIgnoreCase))
{
context.Result = RuleResult.ContinueRules;
return;
}
if (req.Host.Value.StartsWith("www.", StringComparison.OrdinalIgnoreCase))
{
context.Result = RuleResult.ContinueRules;
return;
}
var wwwHost = new HostString($"www.{req.Host.Value}");
var newUrl = UriHelper.BuildAbsolute(req.Scheme, wwwHost, req.PathBase, req.Path, req.QueryString);
var response = context.HttpContext.Response;
response.StatusCode = 301;
response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Location] = newUrl;
context.Result = RuleResult.EndResponse;
}
}
سپس در فایل startup.cs از کلاس RedirectToWwwRule استفاده می کنیم.
var options = new RewriteOptions();
options.AddRedirectToHttps();
options.Rules.Add(new RedirectToWwwRule());
app.UseRewriter(options);
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید