Как удалить www. от входящих запросов? Нужно ли настраивать 301 перенаправление или просто переписать путь? В любом случае, что это лучший способ сделать это?Как удалить www. префикс в ASP.NET MVC
Спасибо!
Как удалить www. от входящих запросов? Нужно ли настраивать 301 перенаправление или просто переписать путь? В любом случае, что это лучший способ сделать это?Как удалить www. префикс в ASP.NET MVC
Спасибо!
Я считаю, что было бы более целесообразно сделать это с помощью модуля перезаписи URL-адресов IIS.
Если у вас есть доступ к инструменту управления IIS, есть GUI для настройки правил перезаписи в разделе «IIS» настроек вашего сайта. Если вы выберете «Добавить правило (ы) ...» оттуда (в меню правого столбца), выберите правило «Каноническое имя домена» в разделе SEO, чтобы почти полностью автоматизировать настройку правила.
Если нет, то правило перезаписи будет выглядеть в вашем web.config:
<system.webServer>
<rewrite>
<rules>
<rule name="CanonicalHostNameRule1">
<match url="(.*)" />
<conditions>
<add input="{HTTP_HOST}" pattern="^yourdomain\.com$" negate="true" />
</conditions>
<action type="Redirect" url="http://yourdomain.com/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
Мне, должно быть, что-то не хватает. Если я вставляю это в свой web.config, я получаю «HTTP Error 500.19 - Внутренняя ошибка сервера Запрошенная страница недоступна, потому что связанные данные конфигурации для страницы недействительны». Я удаляю раздел перезаписи, все работает снова. Любые идеи, что мне здесь не хватает? – Kjensen
@Kjensen: Убедитесь, что у вас установлено расширение Rewrite URL. Вы можете получить его здесь: http://www.iis.net/download/urlrewrite –
Вы можете обрабатывать Application.BeginRequest
событие и проверить, является ли Request.Host
начинается с www
.
Если это так, позвоните Response.RedirectPermanent
и передайте URL-адрес с указанием пути и голого домена.
Вы можете построить новый URL-адрес, написав
"yourdomain.com" + Request.Url.PathAndQuery
Я нашел отличное решение здесь: http://nayyeri.net/remove-quotwwwquot-from-urls-in-asp-net
public class RemoveWWWPrefixModule : IHttpModule
{
public void Dispose() { }
private static Regex regex = new Regex("(http|https)://www\\.", RegexOptions.IgnoreCase | RegexOptions.Compiled);
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
Uri url = application.Context.Request.Url;
bool hasWWW = regex.IsMatch(url.ToString());
if (hasWWW)
{
String newUrl = regex.Replace(url.ToString(),
String.Format("{0}://", url.Scheme));
application.Context.Response.RedirectPermanent(newUrl);
}
}
}
Это более общий характер конфигурации, как вы можете написать его один раз в URL переписывания корневой IIS (не определенный для определенного пула приложений), и он будет автоматически применяться ко всем вашим сайтам IIS без какой-либо зависимости от вашего доменного имени.
Вы можете использовать следующее правило перезаписи в файле web.config.
Это правило перезаписи удалит WWW, а также сохранит обратный URL и инициирующий протокол.
<rewrite>
<rules>
<clear/>
<rule name="Canonical host name" enabled="true">
<match url="(.*)"/>
<conditions trackAllCaptures="true">
<add input="{HTTP_HOST}" negate="false" pattern="^www\.(.+)$"/>
<add input="{CACHE_URL}" pattern="^(.+)://" />
</conditions>
<action type="Redirect" url="{C:2}://{C:1}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent"/>
</rule>
</rules>
</rewrite>
Гораздо проще было бы создать фильтр действий и украсить свое действие им.
public class RemovePrefix : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var url = filterContext.HttpContext.Request.Url.ToString().Replace("http://www.", "http://");
filterContext.Result = new RedirectResult(url);
}
}
Почему вы просто не добавили CNAME, который указывает 'www.domain.com' на' domain.com'? –
* Где * вы хотите удалить его? Вы хотите удалить его * в своем приложении *? Или вы хотите, чтобы ваши пользователи * никогда не видели «www». адрес, даже если они печатают его? –
@Mauricio, что я хочу, даже когда они печатают на www, я хочу его удалить. – Micah