2011-01-23 1 views
1

У меня есть 2 домена, которые разрешают использовать мой веб-сайт www.mysite.com и www.mysitecommonmisspelling.com, а также IP-адрес. У меня есть некоторый код в моем файле Global.asax, который был предназначен, чтобы заставить всех пользователей и поисковых роботов, чтобы использовать только основной домен, например, так:ASP.NET - Возможно ли, чтобы клиенты отключили/не обратили внимание на 301 переадресацию?

Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs) 

    'If the domain isn't the correct top level domain for this environment, 
    'we want to do a 301 redirect to tell the search engines that this is not the right domain to 
    'index. 
    Dim Host As String = Me.EnvironmentHost 
    Dim CurrentHost As String = Request.Url.DnsSafeHost 

    If CurrentHost.ToLower <> Host.ToLower Then 
     Dim Url As String = Request.Url.AbsoluteUri 

     'The AbsolutUri property returns the Default.aspx whether it was actually specified 
     'in the URL or not. Since our server is set up to respond to this as the default page, 
     'we can safely remove it from the URL if it actually exists. We don't want Default.aspx 
     'indexed anyway if possible. 
     Url = Url.Replace("Default.aspx", "") 
     Url = Url.Replace("default.aspx", "") 

     'Replace the current host with the environment host 
     Url = Url.Replace(CurrentHost, Host) 


     Response.Clear() 
     Response.StatusCode = 301 
     Response.Status = "301 Moved Permanently" 
     Response.AddHeader("Location", Url) 
     Response.End() 

    End If 

End Sub 

я проверил и Google не проиндексированы все страницы www.mysitecommonmisspelling. com, поэтому они, по-видимому, уважают 301. Однако несколько дней назад у нас был клиент на нашем сайте, который получил бесплатную доставку, потому что код лицензии, зарегистрированный только для www.mysite.com, потерпел неудачу (другими словами, браузер был доступ к www.mysitecommonmisspelling.com). Раньше у нас были проблемы с сторонним компонентом доставки, так как пользователи имели доступ к сайту с использованием IP-адреса.

В любом случае мы не хотим, чтобы пользователи имели доступ к сайту без правильного домена, поэтому сертификат SSL не жалуется.

Я искал способ отключить 301 переадресацию в IE7, но, похоже, не существует способа. Итак, мне интересно, есть ли какие-либо браузеры, которые могут отключить 301, и если да, то какие способы обхода можно установить, чтобы все браузеры на моем сайте переходили в основной домен, www.mysite.com?

ответ

0

Этот тип перенаправления действительно принадлежит веб-серверу, а не приложению. Для IIS7 существует URL Rewrite Module.

Возможно, вы захотите настроить IIS на размещение двух веб-сайтов, MySite и Misspelling, так что Misspelling никогда не будет на самом деле попадать на ваш настоящий сайт. Просто настройте перенаправление на этом сайте.

Возможно, вы захотите проверить Server Fault, как правильно это сделать, поскольку я не эксперт IIS7.

Что касается части вашего вопроса о том, что браузеры игнорируют это: Конечно, браузеры могут решить не следовать 301 переадресации, но тогда они просто отображают пустую страницу. Если кто-то может обходить его, то это означает, что эта линия:

If CurrentHost.ToLower <> Host.ToLower Then 

не работает должным образом. Я не знаю, могут ли браузеры действительно отправлять неправильное имя хоста при доступе к другому (хотя, если сомневаюсь, я обвиняю Прокси, так как они часто очень странные).

+0

Спасибо. Фактически, я использую IIS6. Я рассмотрю разбивку на два разных сайта. Я подумал о другом потенциальном сценарии: есть ли условие, при котором Application_BeginRequest не срабатывает? – NightOwl888

+1

В MSDN: «Событие BeginRequest сигнализирует о создании любого нового запроса. Это событие всегда поднимается и всегда является первым событием, которое возникает во время обработки запроса». Думаю, это отвечает на этот вопрос - хотя я нашел много сообщений от людей, жалующихся на то, что BeginRequest не срабатывал, и EndRequst сделал. Я попытаюсь поместить этот код в подпроцедуру, а затем вызывать его из обоих мест - попытка 301 в BeginRequest, и если это не удается, выполните 302 с той же логикой сравнения в EndRequest. Если бы прокси установил URL-адрес, и он не совпал, мой код будет работать ... – NightOwl888