Kuidas varjata / suunata sidusettevõtte linke PHP-skriptiga

Mul on kolmas osapool, kes POSTon minu veebisaidi kindlal lehel. Nad postitavad faili ja minu sait teeb selle faili sisuga natuke võlurit.

Taotluse URL oleks näiteks https://example.com/product-configrator

Mõnikord kasutavad nad oma nööri REFERER URL nagu:

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

Kui suunaja edastab argumendiga liikluse mulle bikes=1 (sisaldub HTTP_REFERER pigem kui QUERY_STRING) Soovin teenida erinevat lehte.

Siin on näide kirjest access.log, kus kolmas osapool postitab minu saidile:

 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' 

Nii nad on POSTminu juurde /product-configrator lehele. Ma tahan selle ümber suunata /bikes-configrator säilitades POST andmed (kasutades 307)

Olen testinud ümbersuunamist mõne htaccessi süntaksitesti tööriista abil, kuid ei saa õiget süntaksit.

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

Kuidas ma seda teha saan? Ma tean, et see küsimus on surmani tehtud, kuid ma ei näe minu küsimusele vastavat näidet. Olen selle küsimuse hiljuti ka Stacki ületäitmise kohta esitanud, kuid saadud vastused ei aidanud mul oma .htaccess-failis kehtivat kirjet koostada. Igasugune abi tänulikult tänatud.

  • 1 Mis tahes konkreetne põhjus, miks soovite väliselt "suunata" tagasi taotlus, mitte sisemiselt "ümber kirjutada" päring - kuna sihtkoht näib olevat samas serveris? (Kas kolmas osapool järgib ümbersuunamisi? Või on see lihtsalt taotlus brauseri kaudu?) Kas olete ainult kas soovite POST-taotlusi "ümber suunata"? (Teie eeskirjareegel koos ka GET ümbersuunamisega.)
  • Kui on võimalik sisemiselt ümber kirjutada, on see veelgi parem, kuid ma pean POST-andmed säilitama (arvasin, et 307 ümbersuunamine oli ainus viis seda teha). Kolmas osapool ei tee minu saidile midagi muud kui POST - nad ei väljasta GETS-e. Reegel peaks lihtsalt töötama igasuguse liikluse korral, mis pärineb selle stringiga suunajalt bikes=1 aastal HTTP_REFERER string
  • Kuidas on /bikes-configurator siis suunatakse teie rakendusse? (Eeldatavasti ei kaardistata seda otse füüsilise failiga?)
  • Seal on PHP test - midagi sellist if (isset($_POST['bike'])) { do stuff ...}
  • Milline PHP-fail päringut haldab?

To väliselt suunata taotlus aadressilt /product-configurator (Eeldan, et puuduvad u oli kirjaviga?) kuni /bikes-configurator kui HTTP Referer sisaldab bikes=1 URL-i päringustringi osas võiksite oma ülaosa lähedal asuva mod_rewrite abil teha midagi järgmist .htaccess dokumendi juur:

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

The RewriteCond direktiiv kontrollib URL-i parameetrit bikes=1 kõikjal päringu stringis Referer HTTP päringu päis.

Kui see on mõeldud toimima "mis tahes liikluse" jaoks (nagu kommentaaris soovitatud), siis mitte ainult taotluste jaoks /product-configurator siis muutke RewriteRule muster millegi taolise juurde ^ selle asemel.

Olek 307 on vajalik selleks, et kasutajaagent säilitaks ümbersuunatud taotluses HTTP-meetodi.

Pange tähele, et see suunab ümber kõik päringud, POSTITA ja GET. Soovi korral saate suunata ainult POST-taotlusi, kontrollides seda REQUEST_METHOD serveri muutuja.

Kolmas osapool ei tee minu saidile midagi muud kui POST

Kolmas osapool peab suutma jälgida vastuste ümbersuunamist (ja esitada 2. taotluse). Tavaline HTML-vormi esitamine brauseris järgib loomulikult ümbersuunamist. Kuid skriptitud CURL (näiteks) ei pruugi seda teha.


Siiski pole selge, miks peaksite päringu "ümber suunama", kuna see kõik toimub samas serveris. Võiksite potentsiaalselt sisemiselt ümber kirjutada selle asemel päring (välist ümbersuunamist pole, teist taotlust pole, kõikjal kiirem ja tõhusam). Kuid, /product-configurator ja /bikes-configurator vajavad oma PHP-skripti jõudmiseks täiendavat marsruutimist - nii et "kirjutage" ümber /bikes-configurator ei ole õige.

UUENDAMINE: Sellisel juhul oleks /product-configurator.php

Eeldades, et kasutate lihtsalt laiendita URL-e ja päringuga tegelev alusfail on lihtsalt /bikes-configurator.php siis saate ehk rakendada sisemine ümberkirjutamine selle asemel.

Näiteks ülaltoodu asemel kirjutatakse see järgmiselt:

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

Aadressiribal olev URL jääb samaks /product-configurator, kuid taotlus kirjutatakse sisemiselt ümber (pange tähele, et taotlus puudub R lipp) kuni /bikes-configurator.php millal bikes=1 sisaldub HTTP päringustringis Referer. Välist ümbersuunamist pole.

See võib olla lahendatav ka otse teie PHP-skriptis - täiendavat ümbersuunamist / ümberkirjutamist pole vaja .htaccess nõutud. (Kuigi teie hiljutiste kommentaaride põhjal näib see olevat taotlus /bike-configurator on lihtsalt laienditeta ja päring kaardistub PHP-faili /bike-configurator.php? Loogika, mis testib HTTP_REFERER-i, peaks olema sees /product-configurator.php - siis teete vajalikud PHP-kõned, et juhtimine üle anda /bike-configurator.php kui tingimus on täidetud - kuid täpselt, kuidas seda teete, sõltub teie rakenduse struktuur.)

  • Kuidas sa sellega hakkama said?

none: Charles Robertson | none

none