Удалить "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 без какой-либо зависимости от вашего доменного имени.

IIS Удалить WWW

Другие вопросы по тегам