За последние 24 часа нас посетили 22475 программистов и 997 роботов. Сейчас ищут 611 программистов ...

Редирект в зависимости от реффера

Тема в разделе "Сделайте за меня", создана пользователем zloezlo, 21 июл 2017.

  1. zloezlo

    zloezlo Новичок

    С нами с:
    21 июл 2017
    Сообщения:
    5
    Симпатии:
    0
    И так, господа, доброй ночи. Создаю тему именно в этом разделе, так как понимаю как это выглядит со стороны :)
    Полный нуб в PHP, у меня имеется:

    1) Сайт на Wordpress посл. версии
    2) Вопрос.

    Вопрос вот в чем:

    Как сделать так, что бы при переходе на мой сайт (www.test.com) по ссылке с сайтов - (site1.com; site2.com; site3.com) - пользователя автоматом редиректит на www.google.com
    При любых других переходах - пользователь попадает на целевую страницу.

    Я так понимаю нужен код и его нужно вставить в HEADER страницы.

    Форум курил, похожие темы читал, но там свои особенности которые не подходят к моему случаю.
    Буду весьма благодарен любому, кто окажет помощь! Спасибо заранее! :)
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Можно в index.php вставить самым первым, блок if где в $_SERVER['HTTP_REFERER'] искать нужные сайты с которых ждёшь переход и при нахождении уже перебрасывать на гугл
     
    zloezlo нравится это.
  3. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Также стоит учитывать что некоторые сайты могут не отдавать $_SERVER['HTTP_REFERER'] , и переход будет с хз какого рефера
     
    denis01 нравится это.
  4. EvilCoder

    EvilCoder Новичок

    С нами с:
    21 июл 2017
    Сообщения:
    8
    Симпатии:
    2
    А хуки для кого придумали? )

    Предлагаю более эстетический вариант. Повесить всё на хук init. В вордпрессе есть mu-plugins.
    Нужно создать папку mu-plugins в папке wp-content.

    В папке mu-plugins создаём файл googleredirect.php с таким содержимым:

    PHP:
    1. <?php
    2. add_action( 'init', 'google_redirect' );
    3.  
    4. function google_redirect() {
    5.     if (isset($_SERVER['HTTP_REFERER'])) {
    6.         $parse_url = parse_url($_SERVER['HTTP_REFERER']); //Разбираем на массив url, чтобы получить чисто домен
    7.         switch ($parse_url['host']) {
    8.             case "site1.com":
    9.             case "site2.com":
    10.             case "site3.com":
    11.                 header("location: https://www.google.ru"); //редиректим
    12.                 break;        
    13.         }
    14.     }
    15. }
    16. ?>
    Готово.

    Рефер отдаёт браузер.
     
    #4 EvilCoder, 21 июл 2017
    Последнее редактирование: 21 июл 2017
    denis01 и zloezlo нравится это.
  5. zloezlo

    zloezlo Новичок

    С нами с:
    21 июл 2017
    Сообщения:
    5
    Симпатии:
    0
    Спасибо за помощь, так и сделал.
    После чего в разделе Header.php, после тега <body> прописываю:

    PHP:
    1. <?php
    2.   require "/wp-content/mu-plugins/googleredirect.php";
    3. ?>
    И страница тупо не загружается, просто белый экран. Независимо - захожу я просто на страницу или с реферром указанным в файле googleredirect.php.
     
  6. EvilCoder

    EvilCoder Новичок

    С нами с:
    21 июл 2017
    Сообщения:
    8
    Симпатии:
    2
    А зачем? Этого не нужно делать, вордпресс сам подцепит файлы из mu-plugins и заставит всё работать.

    А ещё, заголовки нельзя передавать после того, как страница начала грузиться. А функция header это и делает, отдаёт заголовки. Т.е. нельзя даже так:
    Код (Text):
    1. <?php
    2. echo "1";
    3. header(ТУТЧТОНИБУДЬ);
    4. ?>
    Ни о каких body и речи не может быть. ) Поэтому и используется хук init.
     
  7. zloezlo

    zloezlo Новичок

    С нами с:
    21 июл 2017
    Сообщения:
    5
    Симпатии:
    0
    Странно, залил файл googleredirect.php по пути мойсайт.ком/wp-content/mu-plugins/googleredirect.php

    И ничего не происходит. Может мне нужно плагин какой-то установить? Простите что так туплю :)
     
  8. EvilCoder

    EvilCoder Новичок

    С нами с:
    21 июл 2017
    Сообщения:
    8
    Симпатии:
    2
    Не. mu-plugins - это стоковая по умолчанию фишка вордпресса. Вы уверены, что рефер не пустой и подходит под условия?
    В условиях не должно быть ничего, кроме доменов. Т.е. только выделенная часть: http://mysite.ru/?a=b&c=d

    Чтобы проверить, пустой ли рефер, давайте попробуем добавить вар_дамп сразу после if.
    PHP:
    1.     if (isset($_SERVER['HTTP_REFERER'])) {
    2.         var_dump($_SERVER['HTTP_REFERER']);
    Результат могут перекрыть части темы, поэтому лучше смотреть в код.

    Всё точно работает, проверил перед публикацией.
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    не сайты. клиенты.
     
    villiwalla нравится это.
  10. zloezlo

    zloezlo Новичок

    С нами с:
    21 июл 2017
    Сообщения:
    5
    Симпатии:
    0
    Добавил, да, тему немного разорвало, но реффер присутствует:

    Код (Text):
    1. string(27) "https://test.com/s/UMk44/"
    Может проблема в том что HTTPS? Потому что хоть убей, просто не редиректит.
     
  11. EvilCoder

    EvilCoder Новичок

    С нами с:
    21 июл 2017
    Сообщения:
    8
    Симпатии:
    2
    Не, протокол тут не при делах. Его не нужно указывать в конструкции case. Его нужно указывать только в header, в котором редирект.
     
  12. zloezlo

    zloezlo Новичок

    С нами с:
    21 июл 2017
    Сообщения:
    5
    Симпатии:
    0
    Даже тему сбросил на стандартную, в Installed Plugins видно что ВП видит этот скрипт
    [​IMG]

    Такие права доступа на файл установлены:

    [​IMG]

    И все равно, при входе на сайт по любому из трех указанных мною рефферов в виде "site.com" ничего не происходит :(

    Еще добавлю, специально для теста отключил все активные плагины которые были установлены, на ситуацию не влияет.
     
  13. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    Поставь права на 755
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    @villiwalla эт зачем еще на файл права 755?
     
  15. villiwalla

    villiwalla Активный пользователь

    С нами с:
    14 дек 2016
    Сообщения:
    471
    Симпатии:
    70
    @Ganzal это из серии методом тыка, кстати в у него там location, не должно ли быть Location?
     
  16. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    хреновый ты какой-то. пхп-скрипты в 99.9% случаев отрабатываются пхп-машиной по запросу веб-сервера а не в терминальном режиме, следовательно права доступа с битом исполнения им явно не нужны. 644 - вполне адекватно. А еще лучше - 640. Или даже 440. Или 400.

    да хоть LoCaTiON - названия заголовков регистронезависимые. Как и названия хостов. Как и логины.
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    я за 440, потому что заливаются они у меня обычно под одним юзером, а исполняются под пхпшным входящим в группу www прост
     
    Ganzal нравится это.