如何检查用户是否正在访问该站点的根URL?

时间:2011-11-11 22:01:15

标签: javascript asp.net asp.net-mvc-3 razor

如果用户访问我网站的根网址,我想启动一些脚本。

例如,我希望在用户访问时在我的视图中执行某些操作

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

... [以上的各种组合。]

而不是www.example.com/anything else 在ASP.NET MVC 3 [Razor]网站和javascript的视图页面中检查这个的最安全的方法是什么?另外,有没有办法找出只使用javascript?
谢谢。

6 个答案:

答案 0 :(得分:58)

最简单的JavaScript方法是:

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

即使http://example.com/?foo=bar#hash也会生成正确的结果,因为路径名会排除查询字符串和位置哈希值。

看看:

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

如果根文件夹中有索引文件,请查看以下示例:

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

上一行使用的是正则表达式。必须转义特殊字符,/i后缀使模式不区分大小写。如果您希望案例匹配,请省略i标记。

以图形方式呈现相同的正则表达式:

Regular expression visualization

答案 1 :(得分:1)

试试这个更健壮的正则表达式:

<强>正则表达式

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


描述

Regular expression visualization


演示

Debuggex Demo

答案 2 :(得分:0)

使用正则表达式:

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

答案 3 :(得分:0)

我认为

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

编辑:请勿使用此功能,请参阅评论

答案 4 :(得分:0)

测试&#34; /&#34;的路径名;当我在我的在线IDE中以调试/预览模式运行我的应用程序时失败。换句话说,它通常提供一个干净的网址(没有.html),除非我从Cloud9提供服务,在这种情况下,它与index.html一起提供。

所以,这对我有用:

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 }

答案 5 :(得分:0)

以下情况如何:

if (location.pathname == "/" || (window.location.href.indexOf("Index") > -1)){

  console.log("do stuff") 

}

请注意“索引”区分大小写