logo

JS — скрыть внешние ссылки на сайте

CMS WordPress — внешние ссылки на странице зашифрованы и превращены во внутренние

Очень простой скрипт для скрытия внешних ссылок на любом сайте. Разрабатывался для CMS WordPress, но будет работать абсолютно везде. Полностью нативный JS. Состоит из небольшого JavaScript кода, PHP обработчика и трех строк для редиректа в .htaccess.

Пример работы и более подробное описание скрипта: https://code.devarts.pro/index.php?page=exlinks

Источник с детальным описанием: https://blog.devarts.pro/wordpress-hide-external-links/

Предусмотрен аттрибут, для исключения шифрования ссылок, а также белый список, доменов. Административной части нет. Все работает на файлах и устанавливается за пару минут. Править ничего не нужно — только дописать немного кода.

JavaScript

    // #######################
    // СКРЫТИЕ ВНЕШНИХ ССЫЛОК
    // #######################

    // получаем все ссылки на странице
    var links = document.querySelectorAll('a[href]');

    // список исключений (слеш в конце обязательно)
    var exclude = [
    'https://exclude.name/',
    ];
        
    // проверяем каждую ссылку в цикле
    for(let i = 0; i < links.length; i++){

        // проверяем, что текущая ссылка не является доменом сайта          
        if(links[i].origin !== window.location.origin){

            // и вешаем на нее открытие в новой вкладке
            links[i].setAttribute('target', '_blank');

            // проверяем ссылку на наличие исключений
            if(!exclude.includes(links[i].href)){           

                // проверяем ее дополнительно на наличие rel="follow"
                if(links[i].getAttribute('rel') != 'follow'){

                    // декодируем в base64 и подставляем префикс /go/
                    links[i].href = '/go/' + btoa(links[i].href);

                    // или без редиректов через .htaccess
                    // links[i].href = '/go.php?go=' + btoa(links[i].href);
            

                }
            }
            
        }
        
    }

Все ссылки передаются методом GET на внешний файл PHP. В скрипте предусмотрено два способа сделать это: просто передав get-ссылку в виде /go.php?go=link_here на нужный адрес или переделав адрес чрез .htaccess в виде /go/link_here. Выбирайте тот вариант, который больше подходит раскомментировав или закомментировав одну строку кода в конце скрипта выше.

PHP-обработчик

В обоих случаях переход по ссылке выполняет GET запрос на файл go.php, который нужно будет скачать (см. источник выше и ниже) и положить в корень сайта.

PHP традиционно получается большим (а это лишь сухой код без визуального оформления). Поэтому ограничимся скриншотом. Полный код можно скачать по ссылке выше и ниже.

.HTACCESS

Данный файл находится в корне сайта и в нашем случае будет отвечать за переадресацию ради сокращения адреса. В него нужно внести четыре строчки кода. На самый верх. Иначе обработчик WordPress заблокирует наши инструкции.

RewriteEngine On
RewriteRule ^go$ ^go/1$ [L]
RewriteRule ^go/(.+)(/?)$ go.php?go=$1 [L]
RewriteRule ^go(/+) go.php [L]

Скрипт разработан мной, но в рамках другого проекта. Поэтому все ссылки там: https://blog.devarts.pro/wordpress-hide-external-links/

Похожие записи


JavaScript: автоматизируем вставку рекламы в текст статей на WordPress
Точечно вставить рекламу в конкретную статью на CMS WordPress не составит никаких проблем. Но вставить ее сразу во все статьи...
WordPress: плавное увеличение изображений на Higslide
Очень простой плагин плавного увеличения изображений, который я написал себе для CMS WordPress. Плагин создавался для замены имеющихся решений, которые...
Полный гайд по миграции с CMS DLE на WordPress
Данный сайт в апреле 2019 года полностью переехал с CMS DLE на CMS WordPress и в июне, после завершения всех...
PHP — простой ротатор баннеров, ротатор для DLE и WordPress
Аналог на javascriptАналог на PHP для больших кодов Очень простой ротатор кода на PHP. Сначала мы объявляем простой двумерный массив...
Как изменить пароль пользователя CMS DLE и WordPress через SQL-запрос
Перебираю старые статьи с целью их оптимизации и наткнулся на эту. В принципе, способ подойдет для любой системы на любом...

Комментарии

    Добавить комментарий