удалить «WWW» в ASP.NET MVC 1.0 - PullRequest
       32

удалить «WWW» в ASP.NET MVC 1.0

2 голосов
/ 13 февраля 2010

Я пытаюсь заставить доменное имя не использовать «www». Я хочу перенаправить пользователя при попытке. Я видел очень мало о решении MVC. Есть ли способ использовать маршрутизацию, встроенную в MVC, или каковы лучшие решения?

Спасибо

Ответы [ 4 ]

4 голосов
/ 13 февраля 2010

Реализован как 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
3 голосов
/ 13 февраля 2010

Хотя я считаю, ответ Джона Гитцена является наиболее элегантным решением, я не смог реализовать do для среды общего хостинга. Решив найти решение, не основанное на приложениях, я нашел это сообщение в блоге , которое показывает хороший альтернативный метод для IIS7. К счастью, DiscountASP.NET имеет модуль перезаписи URL-адресов, доступный через инструмент IIS Manager.

После этого сообщения в блоге о создании правила перезаписи любой URL с www в домене будет перенаправлять 301 на сайт без www. Все время сохраняя полные пути.

Спасибо за всеобщее мнение.

2 голосов
/ 13 октября 2011

Это более общая конфигурация, поскольку вы можете записать ее один раз в перезаписи URL-адреса корневого IIS (не относится к определенному пулу приложений), и она будет автоматически применена ко ВСЕМ вашим веб-сайтам IIS без какой-либо зависимости от вашего доменного имени.

IIS Remove WWW

1 голос
/ 13 февраля 2010

Если у вас есть контроль над сервером, вы должны настроить виртуальный каталог, который принимает запросы на «www.example.com» и перенаправляет (301) их на «example.com»

Хотя это может быть возможно в ASP.NET MVC, ASP не выполняет такого рода перенаправления.

На IIS: Virtual Directory

На Apache:

<VirtualHost *:80>
    ServerName www.example.com
    Redirect permanent / http://example.com/
</VirtualHost>

И настройки IIS, и настройки Apache сохранят основу URL-адреса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...