2011-09-10 18 views

Respuesta

31

Si quieres que funcione con cualquier nombre de host (no hardcoding en la regla), que te gustaría hacer algo como esto:

<rule name="Remove www" stopProcessing="true"> 
    <match url="(.*)" ignoreCase="true" /> 
    <conditions logicalGrouping="MatchAll"> 
    <add input="{HTTP_HOST}" pattern="^www\.(.+)$" /> 
    </conditions> 
    <action type="Redirect" url="http://{C:1}/{R:0}" appendQueryString="true" redirectType="Permanent" /> 
</rule> 

en la acción de redirección, {C: 1} contiene el segundo grupo de captura en la condición, mientras que {R: 0} contiene lo que estaba en la regla (la ruta). appendQueryString = "true" también agregará cualquier cadena de consulta al redireccionamiento (si está presente). Sin embargo, tenga en cuenta que cualquier valor hash de la URL, si está presente, se perderá en el proceso, ya que no se transmitirán al servidor.

+0

Nunca estuve encantado con el fragmento codificado en la primera respuesta, me alegro de poder finalmente marcar una respuesta a esta pregunta. –

+3

¿Qué pasa si alguien entra en https? No desea simplemente redirigirlos automáticamente a http, ¿verdad? – jedmao

+0

@mrjedmao ¡buen punto! Lo investigaré :) –

5

A continuación se debe trabajar:

<system.webServer> 
    <rewrite> 
    <rules> 
     <rule name="Remove WWW" stopProcessing="true"> 
     <match url="^(.*)$" /> 
     <conditions> 
      <add input="{HTTP_HOST}" pattern="^(www\.)(.*)$" /> 
     </conditions> 
     <action type="Redirect" url="http://www.example.com{PATH_INFO}" redirectType="Permanent" /> 
     </rule> 
    </rules> 
    </rewrite> 
</system.webServer> 
-1

Para hacer una redirección que funcione para HTTP y HTTPS se puede utilizar

<rewrite> 
     <rules> 
      <rule name="Lose the www" enabled="true" stopProcessing="true"> 
       <match url="(.*)" ignoreCase="true"/> 
       <conditions logicalGrouping="MatchAll"> 
        <add input="{HTTP_HOST}" pattern="^www\.(.*)$"/>      
       </conditions> 
       <action type="Redirect" redirectType="Permanent" url="{SchemeMap:{HTTPS}}://{C:1}/{R:1}" appendQueryString="true" /> 
      </rule> 
     </rules> 
     <rewriteMaps> 
      <rewriteMap name="SchemeMap"> 
       <add key="on" value="https" /> 
       <add key="off" value="http" /> 
      </rewriteMap> 
     </rewriteMaps> 
    </rewrite> 
2

IIS lo hace automáticamente para usted lo siguiente:

Seleccionar sitio> reescritura de URL> nueva regla> Host canónico Nombre :)

+0

best answer sin lugar a duda. –

Cuestiones relacionadas