c# - net - url rewrite iis
¿Cómo se puede redireccionar con las URL de "www" sin las URL de "www" o viceversa? (8)
Estoy usando ASP.NET 2.0 C #. Quiero redirigir todas las solicitudes de mi aplicación web con "www" a sin "www"
www.example.com a example.com
O
ejemplo.com a www.example.com
Stackoverflow.com ya está haciendo esto, sé que hay un mecanismo prefabricado en el archivo PHP (.htaccess). ¿Pero cómo hacerlo en asp.net?
Gracias
Esto generalmente es manejado por su servidor web directamente en la configuración. Como mencionaste, el archivo .htaccess hace esto para el servidor web Apache, no tiene nada que ver con PHP. Como está utilizando ASP, es casi seguro que su servidor es IIS. Sé que hay una manera de configurar esto directamente con IIS, pero no sé qué es. Se le puede ayudar en su búsqueda al saber que debe buscar en Google cosas relacionadas con "redireccionamiento de IIS", no con "redireccionamiento de ASP".
Dicho esto, puedes HACERLO en PHP, y casi con certeza también en ASP, pero tendrás que acceder a cualquier URL en el dominio incorrecto. Invocar un script ASP que realice la operación de redirección (usando las API apropiadas o estableciendo encabezados directamente ) Esto requerirá algo de reescritura de URL o algo por parte del servidor para que todas las URL en el host incorrecto sean manejadas por su script ... simplemente hágalo directamente en el servidor en primer lugar :)
Hay una publicación en el blog de sobre esto.
http://blog..com/2008/06/dropping-the-www-prefix/
Citando a Jeff:
Aquí está la regla IIS7 para eliminar el prefijo WWW de todas las URL entrantes. Corte y pegue este fragmento XML en su archivo web.config en
<system.webServer> / <rewrite> / <rules> <rule name="Remove WWW prefix" > <match url="(.*)" ignoreCase="true" /> <conditions> <add input="{HTTP_HOST}" pattern="^www/.domain/.com" /> </conditions> <action type="Redirect" url="http://domain.com/{R:1}" redirectType="Permanent" /> </rule>
O, si prefiere usar el prefijo www, puede hacerlo también:
<rule name="Add WWW prefix" > <match url="(.*)" ignoreCase="true" /> <conditions> <add input="{HTTP_HOST}" pattern="^domain/.com" /> </conditions> <action type="Redirect" url="http://www.domain.com/{R:1}" redirectType="Permanent" /> </rule>
He ido con la siguiente solución en el pasado cuando no he podido modificar la configuración de IIS.
Ya sea en un HTTPModule (probablemente el más limpio) o global.asax.cs en Application_BeginRequest o en algún evento de tipo BasePage, como OnInit, realizo una comprobación en contra de la URL solicitada, con una cadena conocida que deseo utilizar:
public class SeoUrls : IHttpModule
{
#region IHttpModule Members
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;
}
public void Dispose()
{
}
#endregion
private void OnPreRequestHandlerExecute(object sender, EventArgs e)
{
HttpContext ctx = ((HttpApplication) sender).Context;
IHttpHandler handler = ctx.Handler;
// Only worry about redirecting pages at this point
// static files might be coming from a different domain
if (handler is Page)
{
if (Ctx.Request.Url.Host != WebConfigurationManager.AppSettings["FullHost"])
{
UriBuilder uri = new UriBuilder(ctx.Request.Url);
uri.Host = WebConfigurationManager.AppSettings["FullHost"];
// Perform a permanent redirect - I''ve generally implemented this as an
// extension method so I can use Response.PermanentRedirect(uri)
// but expanded here for obviousness:
response.AddHeader("Location", uri);
response.StatusCode = 301;
response.StatusDescription = "Moved Permanently";
response.End();
}
}
}
}
Luego registre la clase en su web.config:
<httpModules>
[...]
<add type="[Namespace.]SeoUrls, [AssemblyName], [Version=x.x.x.x, Culture=neutral, PublicKeyToken=933d439bb833333a]" name="SeoUrls"/>
</httpModules>
Este método funciona bastante bien para nosotros.
Hicimos esto en IIS 6 simplemente. Básicamente, creamos un segundo servidor virtual que no tenía nada más que una página personalizada de 404 páginas .aspx. Esta página capturó cualquier solicitud de WHATEVERSERVER.com/whateverpage.aspx y se redirigió al servidor real al cambiar la URL para que sea www.whateverserver.com/whateverpage.aspx.
Bastante simple de configurar, y tiene la ventaja de que funcionará con cualquier dominio que ingrese (si tiene varios dominios, por ejemplo) sin tener que configurar reglas adicionales para cada uno. Por lo tanto, cualquier solicitud de www.myoldserver.com/xxx también será redirigido a www.whateverserver.com/xxx
En IIS 7, todo esto se puede hacer con el componente de escritura de URL, pero preferimos mantener los redireccionamientos desactivados en este servidor virtual.
La respuesta aceptada funciona para una sola URL o solo para algunas, pero mi aplicación sirve cientos de nombres de dominio (hay demasiadas URL para ingresar manualmente).
Aquí está mi regla de IIS7 URL Rewrite Module (el tipo de acción aquí es en realidad una redirección 301, no una "reescritura"). Funciona genial:
<rule name="Add WWW prefix" >
<match url="(.*)" ignoreCase="true" />
<conditions>
<add input="{HTTP_HOST}" negate="true" pattern="^www/.(.+)$" />
</conditions>
<action type="Redirect" url="http://www.{HTTP_HOST}/{R:1}"
appendQueryString="true" redirectType="Permanent" />
</rule>
Para responder a esta pregunta, primero debemos recordar la definición de WWW:
World Wide Web: n. Abbr. WWW
- El conjunto completo de documentos que residen en todos los servidores de Internet que usan el protocolo HTTP, accesibles para los usuarios a través de un simple sistema de apuntar y hacer clic.
- n: una colección de sitios de Internet que ofrecen texto y gráficos y recursos de sonido y animación a través del protocolo de transferencia de hipertexto. Por defecto, todos los navegadores web populares asumen el protocolo HTTP. Al hacerlo, el software deja el ''http: //'' en la URL solicitada y se conecta automáticamente al servidor HTTP en el puerto 80. ¿Por qué entonces muchos servidores requieren que sus sitios web se comuniquen a través del subdominio www? Los servidores de correo no requieren que envíe correos electrónicos a [email protected]. Del mismo modo, los servidores web deberían permitir el acceso a sus páginas a través del dominio principal, a menos que se requiera un subdominio en particular.
De manera sucinta, el uso del subdominio www es redundante y lento de comunicar. Internet, los medios y la sociedad están mejor sin eso.
Usando los enlaces en la parte superior de la página, puede ver los dominios recientemente validados y enviar dominios para la validación en tiempo real.
Servidor web Apache:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www/.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Windows Server / IIS: no hay forma.
Puede usar Url Rewriter desde Code Plex . Con la misma sintaxis
RewriteCond %{HTTP_HOST} !^(www).*$ [NC]
RewriteRule ^(.*)$ http://www.%1$1 [R=301]
En caso de que esté utilizando IIS 7, simplemente navegue hasta la reescritura de URL y agregue la regla de nombre de dominio canónico.
PD Es asegurarse de que te redirijan de domain.com a www.dominio.com
Esta versión:
- Mantenga el http / https de la solicitud entrante.
- Admita varios hosts en caso de que lo necesite (p. Ej., Una aplicación de múltiples usuarios que diferencie al inquilino por el dominio).
<rule name="Redirect to www" stopProcessing="true">
<match url="(.*)" />
<conditions trackAllCaptures="true">
<add input="{CACHE_URL}" pattern="^(.+)://" />
<add input="{HTTP_HOST}" negate="true" pattern="^www/.(.+)$" />
</conditions>
<action type="Redirect" url="{C:1}://www.{HTTP_HOST}/{R:1}" />
</rule>