2010-11-09 19 views
1

Je fais affaire avec certains clients qui utilisent des serveurs Windows et, à ce titre, ne prennent pas en charge les fichiers .htaccess. Ce n'est pas une grosse affaire, mais mon souci est le suivant:Windows Server Redirect Issue

J'ai une règle configurée dans mon fichier .htaccess pour rediriger la version non-www du site vers la version www. Cela rend l'URL plus agréable et empêche le contenu en double indexé. Cependant, il ne semble pas y avoir un moyen simple de le faire sur un serveur Windows. J'ai lu des didacticiels sur la configuration d'un fichier web.config, mais mon expérience avec le serveur Windows est très limitée et je n'ai souvent accès au site que par FTP (pas d'accès au serveur).

Des idées sur une solution rapide et assez simple, que je pourrais utiliser?

Répondre

1

Créer web.config (dans le répertoire racine) fichier avec le contenu suivant:

<?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> 

Le URL Rewrite Module (au moins la version 2.0) doit être installé.

+0

Cela fonctionne très bien pour l'un des sites! Cependant, cela n'a pas fonctionné pour un autre. Que se passe-t-il si le module de réécriture d'URL n'est pas installé? – Batfan

+1

Essayez de coordonner l'installation du module Rewrite - c'est une extension généralement acceptée. D'autre part, vous pouvez écrire votre propre module - c'est assez simple (si vous avez besoin de support, je peux l'écrire pour vous demain). – Matej

+0

C'est très gentil de votre part, mais je ne suis même pas familier avec la façon dont vous ajoutez un module/extension. – Batfan

1

Pour utiliser le fichier créer module personnalisé CanonicalRedirectModule.cs dans le dossier App_Code il le dossier racine de l'application du site Web avec contenu suivant:

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); 
     } 
    } 
} 

Configurez ensuite module 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

Cela ne semble pas fonctionner. J'ai copié le module lui a donné le nom correct et l'ai mis dans un dossier (dans la racine) appelé App_Code. Ensuite, j'ai mis le web.config ci-dessus dans la racine. Est-ce que je manque quelque chose? Merci – Batfan

+1

S'il vous plaît fournir plus d'informations sur l'environnement du serveur (version IIS, version ASP.NET) – Matej

+0

Thats la chose, je n'ai aucun moyen de trouver cela. Je suis seulement en mesure d'obtenir un accès FTP. – Batfan