【问题标题】:How to redirect url using javascript query如何使用 javascript 查询重定向 url
【发布时间】:2013-12-16 20:16:52
【问题描述】:

如何在 url 链接中使用查询 /xxx?xxx 有条件地重定向?

例如,通过以下两个链接访问我网站的任何人都应该被重定向到不同的页面。

mysite.com/contest?a => mysite.com/contest-a
mysite.com/contest?b => mysite.com/contest-b

这可以同时使用 js 和元刷新吗?

如何使用 .htaccess 来做到这一点?

【问题讨论】:

  • 听起来像是你应该在服务器端做的事情,而不是使用 javascript。
  • 听起来像是 window.location = "google.com" 的工作

标签: javascript url redirect


【解决方案1】:

如果有查询字符串,将?的第一个实例替换为-

if (window.location.search.length)
    window.location.href = window.location.href.replace('?','-');

【讨论】:

  • 这会导致不必要的页面刷新。如果你想让你的用户参加比赛-a,你为什么要让他参加比赛?一开始?
  • @PabloMescher - 这就是为什么我在问题中添加了第一条评论,并指出服务器端解决方案将是更好的选择,因为我知道 OP 可能正在使用 node.js,这将完全有效,不是每个人都使用 Apache 吗?
  • 是的,你是对的,我使用了 mod_rewrite,因为我猜 OP 使用 PHP 的可能性更大。通过一个具体的例子更容易解释,但一般原则适用,如果你不希望用户点击某个 url,你不应该等到 js 启动并加载开始重定向。 IMO 为时已晚。
【解决方案2】:

使用

location.href 

检测你现在所在的网址。还有

window.location.replace('mysite.com/contest-a ');

做重定向。 但可能最好在服务器端执行,因为它会更快。

【讨论】:

    【解决方案3】:

    您可以使用以下脚本进行重定向。

    window.onload = function()
    {
       var location = window.location;
       if(location.indexOf("contest?a") > -1)
       {
             window.location.href = "mysite.com/contest-a";
       }
       else
       {
             window.location.href = "mysite.com/contest-b";
       }
    }
    

    【讨论】:

      【解决方案4】:

      如果不刷新页面(哈希除外)就无法更改 url,因此您最好不要一开始就使用该 url,以避免不必要的请求和用户的麻烦。你可以看看mod_rewrite 是这样做的(将用户的“漂亮的 url”转换为你的服务器实际理解的“丑陋的 url”)

      在您的示例中,可能的规则是

      RewriteRule  ^mysite.com/contest-{.+}  /mysite.com/contest?$1
      

      【讨论】:

        【解决方案5】:

        如果您可以在客户端执行此类操作,您可以在您的登录页面(到达的用户将被重定向的页面)上嵌入以下 sn-p,紧跟在 <head> 标记之后:

        <script type="text/javascript">
          var mapReferrer = function() {
            var gotoURL;
        
            switch(document.referrer) {
              case "https://www.google.com":      gotoURL = "http://<yoursite>/arrivedFromSearchEngine"; break;
              case "https://www.facebook.es":     gotoURL = "https://<yoursite>/engageFBusers"; break;
              case "http://<yoursite>/contest?b": gotoURL = "http://<yoursite>/contest-b"; break;
            };
        
            if (gotoURL) window.location = gotoURL;
          };
        
          window.onload = mapReferrer;
        </script>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-20
          • 1970-01-01
          • 2015-03-02
          • 1970-01-01
          • 2014-08-24
          • 2014-11-03
          相关资源
          最近更新 更多