Как да прикриете / пренасочите партньорски връзки с PHP скрипт

Имам трета страна, която POSTе към определена страница на моя уебсайт. Те публикуват файл и сайтът ми прави някои съветници със съдържанието на този файл.

URL адресът на заявката ще бъде например https://example.com/product-configrator

Понякога те използват низ в техните REFERER url като:

https://referrer.com/embed/section.htm?bikes=1 

Ако препращащият предава трафик на мен с аргумента bikes=1 (съдържащи се в HTTP_REFERER а не QUERY_STRING) Бих искал да покажа различна страница.

Ето пример за запис на access.log, където третата страна публикува на моя сайт:

 90.xxx.xxx.xxx- - [21/Oct/2019:15:03:51 +0000] 'POST /product-configurator HTTP/1.1' 200 23505 'https://referrer.com/embed/products.htm?bikes=1' 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36' 

И така, те са POSTинж към моята /product-configrator страница. Искам да пренасоча това към /bikes-configrator запазване на POST данни (с помощта на 307)

Тествах пренасочване с помощта на някои инструменти за тестване на синтаксиса на htaccess, но не мога да получа правилния синтаксис.

RewriteEngine On RewriteCond %{HTTP_REFERER} ^(.*)\.referrer\.(.*)./*bikes* [NC] RewriteRule ^(.*)$ https://www.example.com/bikes-configurator [R=307,L] 

Как мога да направя това? Знам, че този въпрос е направен до смърт, но не виждам пример, който да съответства на въпроса ми. Аз също зададох този въпрос наскоро в Stack Overflow, но отговорите, които получих, не ми помогнаха да създам валиден запис в моя .htaccess файл. Всяка помощ с благодарност оценявам.

  • 1 Всяка конкретна причина, поради която искате външно "пренасочване" на заявката, а не вътрешно „пренапишете“ заявката - тъй като дестинацията изглежда е на същия сървър? (Третата страна следва ли пренасочвания? Или това е просто заявка чрез браузър?) Вие ли сте? само желаете да "пренасочите" POST заявките? (Вашето примерно правило с пренасочване GET.)
  • Ако има начин за вътрешно пренаписване, това е още по-добре, но трябва да запазя данните на POST (мислех, че пренасочването 307 е единственият начин за това). Третата страна не прави нищо освен POST за моя сайт - те не издават GETS. Правилото просто трябва да работи за всеки трафик, идващ от препращащия с този низ bikes=1 в HTTP_REFERER низ
  • Как е /bikes-configurator след това се насочва в приложението ви? (Това вероятно не се свързва директно с физически файл?)
  • Има PHP тест - нещо като if (isset($_POST['bike'])) { do stuff ...}
  • И така, кой PHP файл обработва заявката?

Да се външно пренасочете заявката от /product-configurator (Предполагам, че липсващите u беше печатна грешка?) до /bikes-configurator когато HTTP Referer съдържа bikes=1 в частта на низа на заявката на URL адреса, тогава можете да направите нещо като следното, като използвате mod_rewrite в горната част на вашия .htaccess в корен на документа:

RewriteEngine On RewriteCond %{HTTP_REFERER} \?.*\bbikes=1\b [NC] RewriteRule ^product-configurator$ /bikes-configurator [R=307,L] 

The RewriteCond директива проверява за параметъра URL bikes=1 навсякъде в низа на заявката на Referer Заглавка на HTTP заявка.

Ако това е предназначено да работи за „всякакъв трафик“ (както се предлага в коментар), а не само за заявки за /product-configurator след това променете RewriteRule модел към нещо като ^ вместо.

Състоянието 307 се изисква за потребителския агент да запази HTTP метода в пренасочената заявка.

Имайте предвид, че това пренасочва всичко заявки, POST и GET. Можете да пренасочите само POST заявки, ако желаете, като проверите срещу REQUEST_METHOD сървърна променлива.

Третата страна не прави нищо освен POST за моя сайт

„Третата страна“ трябва да може да следва отговорите за пренасочване (и да подава втората заявка). Обикновено изпращане на HTML формуляр в браузър естествено ще последва пренасочването. Обаче скрипт CURL (например) може да не е такъв.


Не е ясно обаче защо ще трябва да "пренасочвате" заявката, тъй като всичко това се случва на един и същ сървър. Потенциално бихте могли вътрешно пренаписване заявката вместо това (без външно пренасочване, без втора заявка, по-бързо и по-ефективно навсякъде). Въпреки това, /product-configurator и /bikes-configurator изискват допълнително маршрутизиране, за да стигнете до вашия PHP скрипт - така че "пренаписване" към /bikes-configurator не е правилно.

АКТУАЛИЗАЦИЯ: В такъв случай би било /product-configurator.php

Ако приемем, че просто използвате URL адреси без разширения и основният файл, който обработва заявката, е просто /bikes-configurator.php тогава можете да приложите вътрешно пренаписване вместо.

Например, вместо по-горе, това ще бъде написано като:

RewriteCond %{HTTP_REFERER} \?.*\bbikes=1\b [NC] RewriteRule ^product-configurator$ /bikes-configurator.php [L] 

URL адресът в адресната лента остава като /product-configurator, но заявката се пренаписва вътрешно (обърнете внимание на липсата на R флаг) до /bikes-configurator.php кога bikes=1 е включен в низа на заявка на HTTP Referer. Няма външно пренасочване.

Това може да бъде разрешимо директно във вашия PHP скрипт - без допълнително пренасочване / пренаписване .htaccess задължително. (Въпреки че от последните ви коментари изглежда, че искането /bike-configurator е просто без разширение и заявката се свързва с PHP файла /bike-configurator.php? Логиката, която тества HTTP_REFERER, трябва да бъде включена /product-configurator.php - след това правите необходимите PHP повиквания, за да предадете контрол на /bike-configurator.php ако условието е изпълнено - но как точно правите това зависи от структурата на вашето приложение.)

  • Как се справихте с това?

е работил за вас: Charles Robertson | Искате ли да се свържете с нас?