Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как реализовать простой код для перенаправения (https://javascript.ru/forum/misc/84261-kak-realizovat-prostojj-kod-dlya-perenapraveniya.html)

dimpat 23.07.2022 02:10

Как реализовать простой код для перенаправения
 
Доброго времени суток. Подскажите как реализовать простой код для для перенаправения.
Есть двуязычный сайт "site.com/" и "site.com/en", нужно при первом посещении сайта (нет записи в куках) строго по адресу "site.com/" автоматическое перенаправление на "site.com/en". При всех последующих посещениях "site.com/" или при первом посещении по другим ссылкам типа "site.com/index.php?id=170" или "site.com/en" итд ни чего не перенаправляет.
Подскажите пожалуйста как сделать ?
Заранее благодарю за ответ.

dimpat 29.07.2022 03:01

Ладно, отвечу сам себе, возможно новичкам будет полезно.
Для начала реализовали куки для контроля сессии
function getCookie(cname) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for(var i = 0; i <ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
                return c.substring(name.length,c.length);
            }
        }
        return "";
    }

Потом написали скрипт который указывает что срабатывание идет только при заходе на главную.
var a = window.location.pathname;
	if ((a === "/") && getCookie("first_visit") != "true" )  {
        document.cookie = "first_visit=true";
		
        location.href="/en";    
    }


теперь объединили в одну функцию
// языковый одиночный редирект с главной 
$(document).ready(function($){
	var a = window.location.pathname;
	if ((a === "/") && getCookie("first_visit") != "true" )  {
        document.cookie = "first_visit=true";
		
        location.href="/en";    
    }



    function getCookie(cname) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for(var i = 0; i <ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0)==' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
                return c.substring(name.length,c.length);
            }
        }
        return "";
    }   
	});

dimpat 29.07.2022 03:06

Но в моем случае на сайт нужно было вставить согласно европейской директиве уведомление о наличие куков и принятии политики конфиденциальности.
Скрипт брал стандартный, их много в тырнетах, в нем тоже есть запись о куках, по этому решил не городить два скрипта а все повесить в один.
// куки
$(document).ready(function($){
function getCookie(name) {
  let matches = document.cookie.match(new RegExp(
  "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
  ));
  return matches ? decodeURIComponent(matches[1]) : undefined;
}
let cookiecook = getCookie("cookiecook"),
cookiewin = document.getElementsByClassName('ispolzuyet_fayly_kuki')[0];  

var a = window.location.pathname;
if ((a === "/") && cookiecook != "no") {
  
location.href="/en";  
  
}


if (cookiecook != "no") {
  // показываем  
  cookiewin.style.display="block"; 
 
  // закрываем по клику
  document.getElementById("cookie_close").addEventListener("click", function(){
  cookiewin.style.display="none";  
   
  let date = new Date;
  date.setDate(date.getDate() + 364);  // 364 - количество дней хранения 
  document.cookie = "cookiecook=no; path=/; expires=" + date.toUTCString();  
  });
} 


});

рони 29.07.2022 07:39

dimpat,
document.addEventListener("DOMContentLoaded", function() {
            let path = window.location.pathname,
                first_visit = localStorage.getItem("first_visit");
            if ((path === "/") && !first_visit) {
                localStorage.setItem("first_visit", "abracadabra");
                location.href = "/en";
            }
        });


Часовой пояс GMT +3, время: 05:47.