Cómo la fuerza example.com para ser redirigido a www.example.com con la reescritura de URL en IIS7? ¿Qué tipo de regla debe ir en la web.config? Gracias.

  • duplicado de stackoverflow.com/questions/1476934/…
  • ¿Por qué tienen que ser de reescritura de URL? ¿Por qué no el enfoque tradicional: crear un host virtual enlazada a example.com que da un simple «HTTP Redirect’ a http://www.example.com/ (con código de estado 301, y sin el » destino exacto de la opción, por lo que el camino se mantiene intacta).
  • Creo que es más lógico que se incluya este comportamiento dentro de la propia aplicación, en lugar de crear otro apoyo. Pero, aparte de eso, probablemente, no es ninguna diferencia, ¿no?
InformationsquelleAutor niaher | 2010-02-05

4 Comentarios

  1. 28

    Este es Microsoft muestra para URL Rewrite Module 2.0 que redirige *.fabrikam.com a http://www.fabrikam.com

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="Add www" patternSyntax="Wildcard" stopProcessing="true">
                        <match url="*" />
                        <conditions>
                            <add input="{HTTP_HOST}" pattern="www.fabrikam.com" negate="true" />
                        </conditions>
                        <action type="Redirect" url="http://www.fabrikam.com/{R:1}" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>
    • gracias mantenga el buen trabajo 😉
    • me gustaría añadir que usted puede hacer de esto una Redirección Permanente 301 con <tipo de acción=»Redirect» redirectType=»Permanente» url=»fabrikam.com{R:1}» />
    • <tipo de acción=»Redirect» url=»www.{HTTP_HOST}/{R:1}» redirectType=»Permanente» />
    • Si desea conservar el protocolo HTTPS después de la adición de la www parte, esta es una buena solución – weblogs.asp.net/owscott/…
    • ¿Cómo se puede excluir a los sub-dominios de la norma?
  2. 28

    Para hacerlo más genérico puede utilizar la siguiente URL regla de Reescritura que funciona para cualquier dominio:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    <system.webServer>
        <rewrite>
            <rules>
                  <rule name="Add WWW" stopProcessing="true">
                  <match url="^(.*)$" />
                  <conditions>
                     <add input="{HTTP_HOST}" pattern="^(?!www\.)(.*)$" />
                  </conditions>
                  <action type="Redirect" url="http://www.{C:0}{PATH_INFO}" redirectType="Permanent" />
               </rule>
            </rules>
        </rewrite>
    </system.webServer>

    • Funciona siempre y cuando usted no tiene los subdominios.
    • por qué stopProcessing="true"?
    • Una regla puede tener la StopProcessing indicador de encendido. Cuando la acción de la regla se realiza (es decir, la regla coincidente) y este indicador está encendido, significa que no hay más reglas posteriores será procesado y se le enviará la solicitud a la solicitud IIS tubería. De forma predeterminada, esta opción está desactivada.
    • ¿cuál es el punto de encenderlo? si había otra regla, decir redirigir /*contact* => /contact-us esta regla no sería procesado en ese caso
  3. 3

    No está seguro acerca de la mejor manera posible para hacer esto, pero tengo un sitio con todos los viejos dominios /subdominios ejecución de esta web.config:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <rewrite>
                <rules>
                    <rule name="Transfer" stopProcessing="true">
                        <match url=".*" />
                        <action type="Redirect" url="http://www.targetsite.com/{R:0}" redirectType="Permanent" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>

    Parece a conseguir el trabajo hecho.

    • No esta solo redirigir automáticamente cada petición que llega a su servidor? Yo esperaría a sus clientes, si de la inspección de su tráfico, para ver un 301 para cada solicitud.
    • acerca de un retraso de un año para responder a tu comentario, pero tengo una app para iis http://www.targetsite.com y otra aplicación que responde a los dominios quiero reenviado. si una aplicación se aloja, por supuesto es necesario tener una condición.
  4. 0

    No estoy seguro de si esto ayuda, pero yo he optado por hacerlo en el nivel de aplicación. He aquí una rápida acción de filtro escribí a hacer esto.. Simplemente agregar la clase en algún lugar en su proyecto, y entonces usted puede agregar [RequiresWwww] a una sola acción o un completo controlador.

    public class RequiresWww : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                HttpRequestBase req = filterContext.HttpContext.Request;
                HttpResponseBase res = filterContext.HttpContext.Response;
    
                //IsLocal and IsLoopback i'm not too sure on the differences here, but I have both to eliminate local dev conditions. 
                if (!req.IsLocal && !req.Url.Host.StartsWith("www") && !req.Url.IsLoopback)
                {
                    var builder = new UriBuilder(req.Url)
                    {
                        Host = "www." + req.Url.Host
                    };
    
                    res.Redirect(builder.Uri.ToString());
    
                }
    
                base.OnActionExecuting(filterContext);
            }
        }

    Luego

    [RequiresWwww]
    public ActionResult AGreatAction()
    {
    ...
    }

    o

    [RequiresWwww]
    public class HomeController : BaseAppController 
    {
    ..
    ..
    }

    La esperanza de que ayude a alguien. Saludos!

    • Estoy seguro de que esto funciona, pero el sucky problema con esto es que si usted necesita para activar SSL fuera de IIS…. así no se puede. Para mí, ésta es necesaria para conseguir el nuevo certificado de permite cifrar por ejemplo, sólo un rápido reescribir apague, obtener certificados, y se volverá a encender. De esta manera tengo que volver a publicar. Esto no es muy Polimórficos en todo y se considera una mala práctica.

Dejar respuesta

Please enter your comment!
Please enter your name here