2010-11-09 2 views
1

Я имею дело с некоторыми клиентами, которые используют серверы Windows и, как таковые, не поддерживают файлы .htaccess. Это не огромная сделка, но я беспокоюсь о том, что:Ошибка перенаправления Windows Server

У меня есть правило, настроенное в моем файле .htaccess для перенаправления не-www-версии сайта на www-версию. Это улучшает внешний вид URL-адреса и предотвращает индексирование повторяющегося содержимого.

Однако на сервере Windows не существует простого способа сделать это. Я прочитал учебники по настройке файла web.config, но мой опыт работы с сервером Windows очень ограничен и много раз у меня есть FTP-доступ к сайту (без доступа к серверу).

Любые идеи по быстрому и довольно простому решению, которое я мог бы использовать?

ответ

1

Создать web.config (в корневом каталоге) файл со следующим содержанием:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
     <rewrite> 
      <rules> 
       <rule name="CanonicalHostNameRule" stopProcessing="true"> 
        <match url="(.*)" /> 
        <conditions> 
         <add input="{HTTP_HOST}" pattern="^www\.domain\.com$" negate="true" /> 
        </conditions> 
        <action type="Redirect" url="http://www.domain.com/{R:1}" /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 

URL Rewrite Module (по крайней мере версии 2.0) должен быть установлен.

+0

Это отлично работает для одного из сайтов! Однако это не сработало для другого. Что делать, если у них не установлен модуль перезаписи URL? – Batfan

+1

Попробуйте скоординировать установку модуля Rewrite - это общепринятое расширение. С другой стороны, вы можете написать свой собственный модуль - это довольно просто (если вам нужна поддержка, я могу написать его для вас завтра). – Matej

+0

Это очень похоже на вас, но я даже не знаком с тем, как вы добавляете модуль/расширение. – Batfan

1

Чтобы использовать пользовательский модуль создания файла CanonicalRedirectModule.cs в папке App_Code это корневая папка Application веб-сайта со следующим содержанием:

using System; 
using System.Web; 

public class CanonicalRedirectModule : IHttpModule 
{ 
    public const string configKeyCanonicalHostName = "CanonicalHostName"; 

    private string configCanonicalHostName; 

    #region IHttpModule Members 

    public void Dispose() 
    { 
    } 

    public void Init(HttpApplication context) 
    { 
     this.configCanonicalHostName = System.Configuration.ConfigurationManager.AppSettings[configKeyCanonicalHostName]; 

     if (string.IsNullOrEmpty(this.configCanonicalHostName)) 
     { 
      System.Diagnostics.Trace.TraceWarning("Can't find application setting {0} in configuration file (/configuration/appSettings/add/...).", configKeyCanonicalHostName); 
//#if !DEBUG 
//   return; 
//#endif 
     } 

     context.BeginRequest += new EventHandler(context_BeginRequest); 
    } 

    #endregion 

    void context_BeginRequest(object sender, EventArgs e) 
    { 
     HttpApplication app = (HttpApplication)sender; 
     if (app.Request.Url.Host != this.configCanonicalHostName) //&& !app.Request.IsLocal 
     { 
      UriBuilder newUrl = new UriBuilder(app.Request.Url); 
      newUrl.Host = this.configCanonicalHostName; 

      app.Response.Redirect(newUrl.ToString(), true); 
     } 
    } 
} 

Затем настроить модуль в web.config:

<?xml version="1.0"?> 

<system.web> 
    <!-- Configuration for classic pipeline mode --> 
    <httpModules> 
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/> 
    </httpModules> 
</system.web> 

<system.webServer> 
    <!-- Configuration for integrated pipeline mode --> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true" > 
    <add name="CanonicalRedirectModule" type="CanonicalRedirectModule"/> 
    </modules> 
</system.webServer> 

+0

Это, похоже, не работает. Я скопировал модуль, дал ему правильное имя и поместил его в папку (в корне) под названием App_Code. Затем я положил web.config выше в корневой каталог. Я что-то упускаю? Спасибо – Batfan

+1

Просьба предоставить дополнительную информацию о серверной среде (версия IIS, версия ASP.NET) – Matej

+0

То, что у меня нет, я не могу это выяснить. Я только могу получить доступ к FTP. – Batfan

Смежные вопросы