2011-12-25 39 views
15

estoy escribiendo en la parte de mi Application_BeginRequest Global.asax.cs.Cómo saber si un usuario está visitando "/Default.aspx" o simplemente "/"

Para fines de SEO, estoy tratando de redirigir a los usuarios que están buscando en:

http://www.example.com/Default.aspx 

a:

http://www.example.com/ 

Mi pregunta es:

¿Cómo puedo saber cual el el usuario está mirando? He estado usando:

HttpContext.Current.Request.Url.* 

Pero todos los parámetros son idénticos, independientemente de cuál vaya a visitar.

+0

¿Está utilizando ASP.NET de enrutamiento? Si es así, ¿cómo se ve su ruta? –

+0

Tengo curiosidad por saber cómo esto ayuda a SEO, ¿no te podría penalizar un 403? En cualquier caso, creo que un httpmodule puede hacer esto ... ¿es esa una opción? – itchi

+0

Estoy tratando de hacer lo mismo por la misma razón: me han dicho que tener varias URL para la misma página se considera algo malo, así que lo que quiero hacer es detectar una solicitud de "/default.aspx" y emita un redireccionamiento 301 a "/". La respuesta de RickNZ parece un poco compleja. Me interesa ver si tienes una solución más simple. – Andy

Respuesta

2

si es sólo de SEO que usted está preocupado acerca de, a continuación, puede utilizar la la "etiqueta" canónica

Si coloca esto en su página Default.aspx:

<link rel="canonical" href="http://www.mysite.com/" /> 

Google hará siempre Índice

http://www.mysite.com/Default.aspx 

como

http://www.mysite.com/ 

la prevención de las dos páginas se indexen y compitiendo en el Resultados de la búsqueda.

Puede leer más aquí: http://googlewebmastercentral.blogspot.com/2009/02/specify-your-canonical.html

4

Estoy bastante seguro de que esta redirección en particular sucede en un nivel IIS no dentro de la lógica de la aplicación, prehaps apagar la materia página por defecto en IIS?

+0

solo funciona si la página predeterminada es estática – Joshua

+0

Esto funciona también si es dinámico. Si pasa del módulo de documento predeterminado, solo tiene que hacer la reescritura de la URL usted mismo. – usr

+0

Quizás sea otra forma de lidiar con esto para no redirigir desde IIS a su página predeterminada, sino redirigir a una página ficticia que Server.Transfers a Default.aspx. esto le permitiría implicar la url real de la página a la que afecta para su material de SEO. –

1

Puede intentar

HttpContext.Current.Request.Url.* 

con parámetros incorrectos:

a fin de obtener su sitio url visitante por:

Request.AppRelativeCurrentExecutionFilePath 

para más información:

http://msdn.microsoft.com/en-us/library/system.web.httprequest.apprelativecurrentexecutionfilepath.aspx

Sírvanse proporcionar más información y su intento acerca de su problema

+0

No funciona ... – gunwin

+0

-1 porque no funciona. Esta respuesta debe estar debajo de las otras respuestas. – usr

+0

Creo que es importante dar respuestas que se sabe que funcionan porque añaden el mayor valor. Este es el valor que SO agrega a Google. – usr

11

Usted puede obtener la ruta introducida en el navegador del usuario con:

string path = Request.RawUrl; 

MSDN

+0

Si estaba navegando a 'http: // www.site.com/' y la página predeterminada era 'Default.aspx'. Esto devolvería 'http: // www.site.com/Default.aspx' – gunwin

+3

¿Lo ha intentado? Hace lo que quiere para mí ... –

+3

En mi humilde opinión, no debe confiar en este método: 'Request.RawUrl' devuelve algo más allá de la ruta raíz (consultar MSDN) incluidas las cadenas de consulta ... y ocurre después de que IIS haya hecho redirigiendo al comienzo de la solicitud. Sugeriría que mires respuestas como RickNZ o Joshua ... también es posible que quieras probar el módulo UrlRewrite. –

1

Si solicita http://www.site.com/, volverá a dirigir a http://www.site.com/default.aspx mucho antes de que se ejecute su código (¡esto es visible para el navegador de todas las cosas!).

Creo que esto significa comprobar el valor de HTTP Referer le dirá lo que quiere saber.

Como llegar HTTP Referer: Getting the HTTP Referrer in ASP.NET

Ahora bien, si el usuario ha visitado http://www.site.com, ve su código http://www.site.com/default.aspx llama con árbitro de http://www.site.com. Esto no le dice de dónde vinieron, pero sí le informa que accedieron al sitio directamente.

usted tiene la ventaja de que aquí la mayoría de los motores de búsqueda siguen la redirección y agarran la página real, por lo que el valor de árbitro es utilizable para decir si el usuario proviene de un motor de búsqueda o no. Sin embargo, para otros casos, es mejor que recorra los registros de IIS.

Observe que debido a la infraestructura en redireccionamiento de ASP.NET/a /default.aspx, no puede redirigir /default.aspx a/sin crear un bucle infinito. Si quiere servir/directamente, necesitará un calce en frente de IIS.

+0

Comprobar la referencia no ayudará para la primera página cargada en su sitio, solo para la segunda, en cuyo punto probablemente no sea de interés más. – hvd

+0

Veo lo que está intentando ahora, pero eso supone/redirige a /Default.aspx Eso no ocurre necesariamente: una configuración típica de IIS no hace una redirección del lado del cliente de/a/Default.aspx, pero carga y ejecuta /Default.aspx directamente cuando/se solicita. Y aunque es posible configurarlo para que su respuesta funcione, considere que un usuario que visita el sitio se redirige a /Default.aspx, agrega un marcador, cierra el navegador, vuelve a abrir el navegador y visita el marcador. El marcador hará que el usuario vaya directamente a /Default.aspx sin visitar primero /. – hvd

+0

OK, entonces probablemente describo la configuración con la que tengo experiencia, que no configuré, pero no tiene por qué ser así. – Joshua

4

Para una solicitud a:

http://domain.com/ 

cuando se hace referencia desde el evento Begin_Request en un HttpModule:

HttpContext.HttpRequest.Url.AbsolutePath == "/" 
... Url.AbsoluteUri = "http://domain.com/" 
... Url.LocalPath = "/" 

Si usted no está viendo los valores de Application_BeginRequest, puede que tenga que registrar una separada HttpModule. Los eventos Global.asax solo se llaman para el HttpHandlers administrado, por lo que no se pueden llamar hasta que IIS realice un redireccionamiento interno (transferencia) a "/default.aspx".

También es posible que deba deshabilitar el manejo de documentos predeterminado en IIS para que funcione en la dirección que le interesa (la mayoría de los sitios redireccionan de / a /default.aspx, y no al revés).

Editar: otra idea. Registre una nueva extensión como manejador de página ASP.NET, con un proveedor de compilación (en web.config) - tal vez * .asph o algo así. A continuación, cambie el nombre de su actual default.aspx a default.asph. A continuación, agregue default.asph a la parte superior de la lista de archivos predeterminados en IIS, reemplazando default.aspx. Cree un nuevo archivo default.aspx, cuya única función en el código subyacente es redireccionar al /. Deberias hacer eso.

0

Request.url le dará la URL actual que se abre en la ventana del navegador. Puede usar esto para codificar algo que desee.

También puede hacerlo utilizando iis. Establezca Default.aspx como su página predeterminada y cada vez que alguien abra su sitio, la dirección será www.yoursite.com \

Si está tratando de ocultar su url actual del usuario, entonces no es recomendable, pero puede usar la reescritura url para iis

0

La mejor manera de saber qué hay en la ubicación del navegador del usuario es a través de javascript.

Si desea redirigir todos, desde Default.aspx en el momento justo www.mysite.com, se puede hacer algo como esto:

$(document).ready(function() { 
if(window.location.href == "http://www.mysite.com/Default.aspx") 
    window.location.href = "http://www.mysite.com/" 
}); 

Nota: esto se basa en jQuery por $ (document), pero obtiene la idea

+0

Esto no responde a la pregunta acerca de los redireccionamientos del lado del servidor, y no será un beneficio para los propósitos de SEO como se solicita en la pregunta. Los redireccionamientos de JavaScript no beneficiarán al SEO y pueden frustrar a los usuarios y complicar el historial del navegador (¿Sabes cuándo presionas hacia atrás, entonces el navegador simplemente salta hacia adelante? ¡Muy molesto para tus usuarios!) – BenSwayne

+0

Responde el tema de la pregunta: "Cómo para saber si un usuario está visitando /Default.aspx o simplemente/" – voutmaster

+0

Está buscando una respuesta en C#. Además, @BenSwayne tiene razón en que no beneficiará a SEO, ya que es un redireccionamiento temporal 302 en lugar de un redireccionamiento permanente 301. –

0

Utilice una combinación de enrutamiento y el módulo de reescritura IIS. Es posible que deba modificar esto para adaptarlo a la barra al final (si quiere una o no). También tengo todos los nombres de mi página en minúsculas. Usar esto asegurará una redirección permanente 301 permanente para su página default.aspx y se alineará con las mejores prácticas de SEO.

en Global.asax:

<%@ Import Namespace="System.Web.Routing" %> 
<%@ Application Language="C#" %> 

<script runat="server"> 

    void Application_Start(object sender, EventArgs e) 
    { 
     RouteTable.Routes.MapPageRoute("default", string.Empty, "~/default.aspx");  
    } 

y luego, en su tela.config:

<rewrite> 
    <rules>  
    <rule name="Default Document" stopProcessing="true"> 
     <match url="(.*?)/?default\.aspx$" ignoreCase="true" /> 
     <action type="Redirect" url="{R:1}/" redirectType="Permanent" /> 
    </rule> 
    </rules> 
</rewrite> 

Si no está familiarizado con el enrutamiento, usted entonces tener acceso a la página de inicio en un enlace como tales:

<asp:HyperLink ID="homeLink" runat="server" NavigateUrl="<%$RouteUrl:RouteName=default %>">HOME</asp:HyperLink> 
Cuestiones relacionadas