Как перенаправить URL-адрес "www" без URL-адреса "www" или наоборот?
Я использую ASP.NET 2.0 С#. Я хочу перенаправить весь запрос для моего веб-приложения с "www" без "www"
www.example.com к example.com
или
example.com на www.example.com
Stackoverflow.com уже делает это, я знаю, что в файле PHP (.htaccess) есть механизм предварительной обработки. Но как это сделать в asp.net?
Спасибо
Ответы
Ответ 1
В прошлом я пошел со следующим решением, когда мне не удалось изменить настройки IIS.
Либо в HTTPModule (возможно, самом чистом), либо в global.asax.cs в Application_BeginRequest или в каком-то событии типа BasePage, например OnInit, я выполняю проверку по запрошенному URL-адресу с известной строкой, которую я хочу использовать:
public class SeoUrls : IHttpModule
{
#region IHttpModule Members
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;
}
public void Dispose()
{
}
#endregion
private void OnPreRequestHandlerExecute(object sender, EventArgs e)
{
HttpContext ctx = ((HttpApplication) sender).Context;
IHttpHandler handler = ctx.Handler;
// Only worry about redirecting pages at this point
// static files might be coming from a different domain
if (handler is Page)
{
if (Ctx.Request.Url.Host != WebConfigurationManager.AppSettings["FullHost"])
{
UriBuilder uri = new UriBuilder(ctx.Request.Url);
uri.Host = WebConfigurationManager.AppSettings["FullHost"];
// Perform a permanent redirect - I've generally implemented this as an
// extension method so I can use Response.PermanentRedirect(uri)
// but expanded here for obviousness:
response.AddHeader("Location", uri);
response.StatusCode = 301;
response.StatusDescription = "Moved Permanently";
response.End();
}
}
}
}
Затем зарегистрируйте класс в файле web.config:
<httpModules>
[...]
<add type="[Namespace.]SeoUrls, [AssemblyName], [Version=x.x.x.x, Culture=neutral, PublicKeyToken=933d439bb833333a]" name="SeoUrls"/>
</httpModules>
Этот метод работает для нас хорошо.
Ответ 2
Здесь есть сообщение в блоге Stackoverflow.
http://blog.stackoverflow.com/2008/06/dropping-the-www-prefix/
Цитирование Jeff:
Вот правило IIS7 для удаления WWW префикс из всех входящих URL-адресов. Сокращение и вставьте этот фрагмент XML в свой Файл web.config в
<system.webServer> / <rewrite> / <rules>
<rule name="Remove WWW prefix" >
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.domain\.com" />
</conditions>
<action type="Redirect" url="http://domain.com/{R:1}"
redirectType="Permanent" />
</rule>
Или, если вы предпочитаете использовать www префикс, вы также можете сделать это:
<rule name="Add WWW prefix" >
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTP_HOST}" pattern="^domain\.com" />
</conditions>
<action type="Redirect" url="http://www.domain.com/{R:1}"
redirectType="Permanent" />
</rule>
Ответ 3
Принятый ответ работает для одного URL-адреса или всего нескольких, но мое приложение обслуживает сотни доменных имен (слишком много URL-адресов для ввода вручную).
Вот мое правило модуля Rewrite URL-адреса IIS7 (тип действия здесь на самом деле является 301 перенаправлением, а не "переписывать" ). Отлично работает:
<rule name="Add WWW prefix" >
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="^www\.(.+)$" />
</conditions>
<action type="Redirect" url="http://www.{HTTP_HOST}/{R:1}"
appendQueryString="true" redirectType="Permanent" />
</rule>
Ответ 4
Чтобы ответить на этот вопрос, мы должны сначала напомнить определение WWW:
Всемирная паутина:
п. Сокращенный WWW
- Полный набор документов, находящихся на всех интернет-серверах, использующих протокол HTTP, доступных пользователям через простую систему "точка-и-клик".
- n: коллекция интернет-сайтов, которые предлагают текстовые и графические и звуковые и анимационные ресурсы через протокол гипертекстовой передачи.
По умолчанию все популярные веб-браузеры используют протокол HTTP. При этом программное обеспечение добавляет "http://" на запрошенный URL-адрес и автоматически подключается к HTTP-серверу на порту 80. Почему тогда многие серверы требуют, чтобы их веб-сайты связывались через субдомен www? Почтовые серверы не требуют отправки писем по адресу [email protected] Аналогичным образом, веб-серверы должны разрешать доступ к своим страницам, хотя основной домен, если не требуется конкретный поддомен.
Вкратце, использование субдомена www является избыточным и трудоемким для общения. Интернет, средства массовой информации и общество обойдутся без него.
Используя ссылки в верхней части страницы, вы можете просматривать недавно проверенные домены, а также отправлять домены для проверки в режиме реального времени.
Веб-сервер Apache:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Windows Server/IIS:
Нет способа.
Вы можете использовать Url Rewriter из Code Plex. С тем же синтаксисом.
RewriteCond %{HTTP_HOST} !^(www).*$ [NC]
RewriteRule ^(.*)$ http://www.%1$1 [R=301]
Источник
Ответ 5
Обычно это выполняется вашим веб-сервером непосредственно в конфигурации. Как вы упомянули, файл .htaccess делает это для веб-сервера Apache - он не имеет ничего общего с PHP. Поскольку вы используете ASP, это почти наверняка означает, что ваш сервер IIS. Я знаю, что есть способ настроить это прямо с IIS, но я не знаю, что это такое. Вам может помочь в поиске, зная, что вы должны искать в Google событиях, связанных с "перенаправлением IIS", а не "перенаправление ASP".
Тем не менее, вы можете сделать это на PHP и почти наверняка на ASP, но вам придется ударить по любому URL-адресу в неправильном домене, вызывая ASP script, который выполняет операцию перенаправления (используя соответствующие вызовы API или путем установки заголовков напрямую). Это потребует некоторой перезаписи URL-адресов или со стороны сервера, так что все URL-адреса на неправильном хосте обрабатываются вашим script... просто сделайте это прямо на сервере в первую очередь:)
Ответ 6
Мы сделали это на IIS 6 довольно просто.
Мы по существу создали второй виртуальный сервер, который ничего не имел на нем, чем пользовательская страница с 404 страницами .aspx.
Эта страница поймала любые запросы на WHATEVERSERVER.com/whateverpage.aspx и перенаправлена на реальный сервер, изменив URL-адрес на www.whateverserver.com/whateverpage.aspx.
Довольно проста в настройке и имеет то преимущество, что она будет работать с любыми доменами, входящими в нее (если у вас есть несколько доменов, например), без необходимости устанавливать дополнительные правила для каждого из них. Поэтому любые запросы на www.myoldserver.com/xxx также будут перенаправлены на www.whateverserver.com/xxx
В IIS 7 все это можно сделать с помощью компонента записи URL-адресов, но мы предпочитаем, чтобы перенаправления на этом виртуальном сервере не выполнялись.
Ответ 7
Если вы используете IIS 7, просто перейдите к перезаписи URL и добавьте правило канонического имени домена.
P.S. Чтобы убедиться, что вы перенаправляетесь с сайта domain.com на www.domain.com
Ответ 8
Эта версия будет:
- Сохранять http/https входящего запроса.
- Поддержка различных хостов в случае необходимости (например, приложение с несколькими арендаторами, которое отличает арендатора по домену).
<rule name="Redirect to www" stopProcessing="true">
<match url="(.*)" />
<conditions trackAllCaptures="true">
<add input="{CACHE_URL}" pattern="^(.+)://" />
<add input="{HTTP_HOST}" negate="true" pattern="^www\.(.+)$" />
</conditions>
<action type="Redirect" url="{C:1}://www.{HTTP_HOST}/{R:1}" />
</rule>