2010-09-26 198 views
1

当用户进入到基座域http://www.domain.com/http://domain.com/
页面必须被重定向到的http:// WWW。 domain.com/#!/news.html如何正确处理javascript重定向?

我的意思是这样的:

if (window.location.href("http://www.domain.com/") || window.location.href("http://domain.com/")) { 
    window.location.replace("http://domain.com/#!/news.html"); 
} 

这是行不通的。尤其是,页面在两个不同的域上提供。
任何想法如何在漂亮的Javascript或jQuery(使用jQuery 1.4.2)解决它?

回答

3

使用上location解析-URL属性,如pathnamehostnamesearchhash,而不是试图乱用href

if (location.pathname==='/' && location.hash==='') 
    location.hash= '#!/news.html'; 

尤其是,页面提供了两个不同的域。

这是最好的搜索引擎优化穿上只有一个特定的主机您的网站,并重定向任何其他相关的主机名到正规主机名。让HTTPD配置担心域名而不是您的应用。例如,如果你选择了www.domain.com是你的正规主机名,在Apache的配置,你可以说:

<VirtualHost *:80> 
    ServerName www.domain.com 
    DocumentRoot ... 
    ... other settings for the main site ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName domain.com 
    ServerAlias someotherdomain.org 
    ServerAlias www.someotherdomain.org 
    Redirect permanent/http://www.domain.com/ 
</VirtualHost> 

其他Web服务器建立重定向的不同方式。如果您无法访问Apache配置并且仅限于.htaccess(唉),那么您必须使用mod_rewrite根据主机名执行条件重定向。

+0

谢谢,您的解决方案可行!我注意到服务器解决方案,期待改变这一点。 – Thomas 2010-09-26 14:01:07

4
var loc = window.location.href; 

if(loc == 'http://domain.com' || loc == 'http://www.domain.com') { 
    window.location.href = 'http://domain.com/#!/news.html'; 
} 

编辑

var d = window.location.hostname; 
var loc = window.location.href; 
if(loc == d) { 
    window.location.href = d +'/#!/news.html'; 
} 

document.domain真是救了我的命来回答你的问题,我试图回答使用正则表达式你的问题,我的模式没有匹配可用的可能性。 好像我真的要回去学​​习正则表达式:)

编辑

var d = window.location.hostname; 
+0

这工作,谢谢。这个网站有两个域名,domain.com和domain1.com。现在我会为这两个域做两次这个片段。或者有更好的方法来做到这一点? – Thomas 2010-09-26 11:34:46

+0

@thomasz我已经更新了我的答案,试试看吧=) – 2010-09-26 12:11:11

+0

@Avinash感谢您的努力:)这似乎是一个非常好的解决方案,但不幸的是'document.domain'将无法正常工作。地址不会改变,服务器的响应状态是404。在任何js被加载之前,代码片段被触发,是否有更多的东西被'document.domain'使用? – Thomas 2010-09-26 12:37:11