Удалить "WWW" в ASP.NET MVC 1.0
Я пытаюсь заставить доменное имя не использовать "www". Я хочу перенаправить пользователя при попытке. Я видел очень мало о решении MVC. Есть ли способ использовать маршрутизацию, встроенную в MVC, или какие есть лучшие решения?
Спасибо
4 ответа
Если у вас есть контроль над сервером, вы должны настроить виртуальный каталог, который принимает запросы на "www.domain.com" и перенаправляет (301) их на "domain.com"
Хотя это возможно в ASP.NET MVC, перенаправление такого рода не является задачей ASP.
В IIS: http://img138.imageshack.us/img138/4213/virtualdirectories.png
На Apache:
<VirtualHost *:80>
ServerName www.domain.com
Redirect permanent / http://domain.com/
</VirtualHost>
Настройки IIS и Apache сохранят основу URL-адреса.
Реализован как ActionFilter, так как он похож на MVC и более явный.
public class RemoveWwwFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var req = filterContext.HttpContext.Request;
var res = filterContext.HttpContext.Response;
var host = req.Uri.Host.ToLower();
if (host.StartsWith("www.")) {
var builder = new UriBuilder(req.Url) {
Host = host.Substring(4);
};
res.Redirect(builder.Uri.ToString());
}
base.OnActionExecuting(filterContext);
}
}
Примените ActionFilter к своим контроллерам или классу базовых контроллеров, если он у вас есть.
Введение в фильтры действий см. В разделе Общие сведения о фильтрах действий в MSDN.
[RemoveWwwFilterAttribute]
public class MyBaseController : Controller
Хотя я полагаю, John Gietzen ответ John Gietzen является наиболее элегантным решением, я не смог внедрить его в среду общего хостинга. Решив найти решение, не основанное на приложениях, я нашел этот пост в блоге, который показывает хороший альтернативный метод для IIS7. К счастью, DiscountASP.NET имеет модуль перезаписи URL, доступный через инструмент IIS Manager.
После этого сообщения в блоге о создании правила перезаписи любой URL с www в домене будет перенаправлять 301 на сайт без www. Все время сохраняя полные пути.
Спасибо за вклад каждого.
Это более общая конфигурация, поскольку вы можете написать ее один раз в перезаписи URL-адреса корневого IIS (не относится к определенному пулу приложений), и она будет автоматически применяться ко ВСЕМ вашим веб-сайтам IIS без какой-либо зависимости от вашего доменного имени.