【问题标题】:how to handle javascript redirect correctly?如何正确处理 javascript 重定向?
【发布时间】:2010-09-26 11:21:01
【问题描述】:

当用户访问基本域 http://www.domain.com/http://domain.com/ 时,
页面必须重定向到 http://www.domain.com/#!/news.html

我的意思是这样的:

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)解决它?

【问题讨论】:

    标签: javascript jquery redirect dns


    【解决方案1】:
    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;
    

    【讨论】:

    • 这行得通,谢谢。这个网站有两个域名,domain.com 和 domain1.com。现在我会为这两个域执行两次 sn-p。还是有更好的方法来做到这一点?
    • @Avinash 感谢您的努力:) 这似乎是一个不错的解决方案,但不幸的是“document.domain”不起作用。地址不会改变,服务器以 404 状态响应。sn-p 在加载任何 js 之前被触发,是否尊重更多与 'document.domain' 一起使用的东西?
    • @thomasz 那么你需要用正则表达式匹配域,我尝试使用正则表达式来匹配并提取域名以匹配我之前告诉你的window.location.href。我猜正则表达式是解决您的问题的正确(也是唯一)解决方案
    • @thomaz 我刚刚找到了window.location.hostname,它给出了域名,我用它更新了我的答案。请尝试一下,如果有帮助,请告诉我
    • @Avinash with window.location.hostname 与 document.domain 的问题相同。我想我必须尝试你说的 RegEx 解决方案......
    【解决方案2】:

    location 上使用解析后的URL 属性,例如pathnamehostnamesearchhash,而不是试图弄乱href

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

    特别是,页面是在两个不同的域上提供的。

    对于 SEO 来说,最好只将您的网站放在一个特定的主机名上,并将任何其他关联的主机名重定向到该规范的主机名。让 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>
    

    其他网络服务器有不同的设置重定向方式。如果您无权访问 Apache 配置并且仅限于 .htaccess(呃),那么您必须使用 mod_rewrite 根据主机名进行条件重定向。

    【讨论】:

    • 谢谢,您的解决方案有效!我注意到服务器解决方案,期待改变它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-23
    • 2015-04-21
    • 1970-01-01
    • 2011-02-17
    • 2018-04-27
    • 2017-12-13
    • 2018-11-18
    相关资源
    最近更新 更多