2011-11-11 10 views
18

Me gustaría iniciar algunas secuencias de comandos si el usuario visita la URL raíz de mi sitio.¿Cómo comprobar si el usuario está visitando la URL raíz del sitio?

Por ejemplo, yo quiero hacer algo en mi opinión, cuando el usuario está visitando

  • www.example.com
  • example.com
  • www.example.com/
  • http://www.example.com
  • http://example.com

... [Diversas combinaciones de las anteriores.]

Y no para www.example.com/anything else.
¿Cuál es la forma más segura de verificar esto en una página de vista de un sitio web ASP.NET MVC 3 [Razor] y javascript? Además, ¿hay alguna forma de averiguar usando solo javascript?
Gracias.

Respuesta

51

La JavaScript método más fácil es:

var is_root = location.pathname == "/"; //Equals true if we're at the root 

Incluso http://example.com/?foo=bar#hash producirá el resultado correcto, ya que el nombre de ruta excluye la cadena de consulta y la ubicación de hash .

echar un vistazo:

http://anything-but-a-slash/     Root 
          /?querystring  Root 
          /#hash    Root 
          /page    Not root 

Si tiene archivo (s) de índice en la carpeta raíz, echar un vistazo al siguiente ejemplo:

var is_root =/^\/(?:|index\.aspx?)$/i.test(location.pathname); 

La línea anterior está utilizando un habitual expresión. Los caracteres especiales tienen que ser escapados, el postfijo /i hace que el patrón no distinga entre mayúsculas y minúsculas. Si desea que la caja coincida, omita la bandera i.

La misma expresión regular presenta gráficamente:

Regular expression visualization

+0

Gracias por la respuesta completa. – Kamyar

+0

Si también necesita soporte para localhost intente esto, donde/Site/representa el proyecto var is_root = (window.location.pathname == "/" || window.location.pathname == "/ Site /")? verdadero Falso; – afreeland

+0

@afreeland Para 'http: // localhost/Site /', 'location.pathname' muestra'/Site/'. Si desea probar un sitio web, temporal, será mejor que use '.htaccess' para volver a escribir la raíz. Ver: http://pastebin.com/4ZJzKJkE. Además, 'a == b' ya devuelve un booleano, no es necesario usar' (a == b? True: falso) '. –

0

Con una expresión regular como:

(/^https?\:\/\/[^\/]+\/?$/).test(window.location.href)

+3

parece mucho más fácil de usar 'window.location.pathname'. – jfriend00

+0

eso es malditamente cierto :) – Mic

+0

@Mic poco confundido con la expresión regular ¿puede por favor informarlo? – Praveen

0

creo

if(window.location == window.location.hostname) { 
    //is root 
} 

Editar: No utilice esto, véase el comentario

+1

Gracias. pero 'window.location.hostname' no respeta los números de puerto. Entonces, en desarrollo, si tiene un número de puerto distinto a 80, obtendrá resultados falsos. – Kamyar

+1

@Kamyar: tienes razón, gracias – Andre

1

Prueba esta expresión regular más robusta :

Regex

var isRoot =/^(\/|\/index\.asp|\/index\.aspx)$/i.test(location.pathname); 


Descripción

Regular expression visualization


Demostración

Debuggex Demo

0

La prueba de la ruta de acceso de "/" falló cuando ejecuté mi aplicación en modo de depuración/vista previa desde mi IDE en línea. En otras palabras, normalmente se sirve con una URL limpia (no .html) excepto cuando la publico desde Cloud9 en cuyo caso se sirve con index.html.

lo tanto, esto es trabajo para mí:

if(window.location.pathname.length == 1 || window.location.pathname.length == 0 || window.location.pathname === "/index.html" || window.location.pathname === "/index"){ //I'm at the app root }

Cuestiones relacionadas