【问题标题】:Endless redirect loop when trying to redirect user to /en with navigator.language尝试使用 navigator.language 将用户重定向到 /en 时无休止的重定向循环
【发布时间】:2019-05-01 10:58:51
【问题描述】:

我有一个德语 Wordpress 网站 (http://website.de),并使用 TranslatePress (http://website.de/en) 制作了每个页面的英文版本。现在我尝试使用 navigator.language 获取 JQuery 中每个用户的语言,并将非德语用户重定向到 /en:

<script type="text/javascript">
    $(document).ready(function(){
        var userLang = navigator.language || navigator.userLanguage;
        if (userLang == "de") {
            window.location = "http://www.website.de";;
        }
        else {
            window.location = "http://www.website.de/en";
        }
    });
</script>

但它会导致无限循环,并且页面每秒都会重新加载。我该怎么做才能避免这种情况?

【问题讨论】:

  • 这个脚本在哪个页面上? /en 页面或主页 - 或两者兼而有之?但是,在所有情况下,问题本质上都是相同的,如果用户尚未在正确的页面上,您只需要进行重定向 - 否则您确实会得到一个无限的重定向循环。
  • 我在wordpress页面的中插入了脚本(自带插件中的函数)

标签: javascript jquery loops redirect userlocation


【解决方案1】:

Robin Zigmond 是正确的 - 如果您在 if 和 else 块中都重定向,它总是会导致无限循环(例外情况除外)。可以试试

 <script type="text/javascript">
        $(document).ready(function(){
            var userLang = navigator.language || navigator.userLanguage;
            var isUserOnEnglishVer = window.location.href.indexOf("website.de/en") >=0;
            if (userLang == "de" && isUserOnEnglishVer) {
                window.location = "http://www.website.de";
            }
            if (userLang != "de" && !isUserOnEnglishVer){
                window.location = "http://www.website.de/en";
            }
        });
    </script>

换句话说,仅当您使用的版本不正确时才重定向。

但是,如果没有内置的语言重定向方式,我会感到惊讶。

【讨论】:

  • 成功了,非常感谢@Ferenc! TranslatePress 中有一种内置的语言重定向方式,但它需要专业版。
  • 乐于助人。请记住,这会丢失路径,因此链接到“website.de/path/to/your/resource”的非德语设置的人最终会使用“website.de/en”,这对用户体验不利。考虑在 DE -> EN 时将 window.location.pathname 添加到重定向 URI,在 EN -> DE 时考虑添加不带前三个字符('/en')的重定向 URI
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 2015-12-22
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 2015-10-24
相关资源
最近更新 更多