Atzīsim, ka drošības / privātuma apsvērumu dēļ es vēlos globāli noteikt savu novirzīšanas politiku 'no-referrer'.

Piemēram, izmantojot Apache's .htaccess's

Header always set Referrer-Policy no-referrer 

IIS ' web.config's

        

Citiem vārdiem sakot, es vēlos, lai šī politika tiktu globāli ieviesta katrai atsevišķai vietnei.

Tomēr vienam konkrētam domēnam (teiksim https://validator.w3.org/), Es gribētu nosūtīt novirzītāju (piemēram, lai izmantotu ērto url https://validator.w3.org/check?uri=referer).

Es varētu izmantot eksperimentālo referrerpolicy saišu atribūts, bet es nezinu, cik labi šis atribūts tiek atbalstīts. Es arī nezinu, vai šāds atribūts var ignorēt servera iestatījumus.

The link type 'norefferer' šķiet, ka atribūts ir labi atbalstīts, bet es vēlos panākt pretējo!

Kā es vispārēji varētu aizliegt nosūtītāja nosūtīšanu, izņemot saites, kas norāda uz noteiktu domēnu?

  • Ja jūs vienkārši vēlējāties nodot novirzītāja informāciju konkrētai ārējai saitei, to var izdarīt, novirzot uz starpnieka lapu, kas ir spiesta http vietnē htaccess. un mainīt starpnieka lapu starpnieka lapā, izmantojot metatagu, un novirzīšanas pievienošanu, izmantojot meta atsvaidzināšanu. Esmu pārliecināts, ka ir daudz elegantāku veidu, kā to sasniegt, taču tas darbojas. Tomēr ar to teica validator.w3.org/check?uri=referer
  • Tātad būtībā vēlaties nodot novirzīšanas datus tikai vienai vietnei, bet bloķēt domēna parādīšanos kā visu citu novirzīšanas avotu? Neesat pārliecināts, ka es pilnībā saprotu jūsu pamatdomu vai kā tas jums palīdz, taču atbildi varat atrast šeit: developers.google.com/analytics/devguides/collection/…
  • @BronwynV Paldies par komentāru.Es neesmu pārliecināts, ka saprotu jūsu priekšlikuma tehnisko informāciju, bet, ja tas nedarbojas validator.w3.org/check?uri=referer, tad man tas tiešām nav noderīgs.
  • @JoshSalganik Jā, jums ir tiesības: es vēlos, lai novirzītājs tiktu pārsūtīts tikai tad, kad piekļūstat konkrētai vietnei / domēnam. Mani pamatā esošie nodomi ir izmantot validator.w3.org/check?uri=referer: Noklikšķiniet uz saites, ja novirzītājs tika pārsūtīts, mēs būtu nokļuvuši vietnē validator.w3.org/nu/ ... Tas ļaus ietaupīt došanas nastu precīzu saiti uz katru lapu. Es neredzu, kā mana problēma ir saistīta ar google analytics.
  • 1 Ja šajā gadījumā galvenais mērķis ir pārbaudīt vietrādi URL W3C validatorā, pārbaudāmo URL varat nodot tieši URL parametrā. piem. https://validator.w3.org/check?uri=http://www.example.com/path/to/foo.
+50

2. metode

Ievērojot 1. metodes koncepciju (zemāk), es sapratu, ka to, iespējams, var izdarīt tikai ar vienu tehnoloģiju un nepārlādējot pašreizējo lapu. Tas viss tiek darīts klienta pusē ar vienkāršu javascript.

<!DOCTYPE html> <head> </head> <body> Link that you do want to allow referrer to be passed to Link that you don't want referrer to be passed to <script> document.getElementById('allowReferrer').addEventListener('click', function(e){ e.preventDefault(); var metaRef = document.createElement('meta'); metaRef.setAttribute('name', 'referrer'); metaRef.setAttribute('content', 'origin'); document.head.appendChild(metaRef); window.location.href=this.href; }); </script> </body> </html> 

(Šo kodu noteikti var uzlabot - tas ir tikai koncepta pierādījums.)

Būtībā vietnē ir notikumu klausītājs allowReferrer ID, kas, aktivizējot, neļauj sekot saitei, virsrakstam pievieno metr tagu referrer = origin, pēc tam seko saitei. Daudz sakoptāka nekā 1. metode.

1. metode

Es tikko izmēģināju diezgan samocītu risinājumu, bet tas ir vienīgais risinājums, ko es varu iedomāties, un tas tiešām darbojās.

<!DOCTYPE html> <head> <?php if ($_GET['referrer'] == 'true') { echo '<meta name='referrer' content='origin'>'; echo '<script>window.location.href = ''.$_GET['location'].'';</script>'; } else { echo '<meta name='referrer' content='no-referrer'>'; }  <body> Saite, kurai vēlaties atļaut novirzītāja pārsūtīšanu uz saiti, kurai nevēlaties nodot novirzītāju </body>   ?> var13 ->

(Šo kodu noteikti var uzlabot - tas ir tikai koncepta pierādījums.)

Kad lapa tiek ielādēta, tiek meklēts vaicājuma parametrs ar nosaukumu “refferer”, ja tas nav iestatīts uz “true”, tad novirzītāja metatags ir iestatīts uz “no-refferer”, bet, ja tas ir iestatīts uz “true”, tad novirzītājs metatags ir iestatīts uz “izcelsme” un tiek izpildīts javascript, lai novirzītu jūs uz vietu, kas atrodas otrajā vaicājuma parametrā ar nosaukumu “atrašanās vieta”.

Visām saitēm parasti seko, nenododot informāciju par novirzītājiem. Ja vēlaties, lai saite ļautu nodot novirzītāju, saiti izveidojiet kā

[current URL]?referrer=true&location=[link which should be url encoded]

piemēram

http://example.com/test/some-page.php?referrer=true&location=https%3A%2F%2Fvalidator.w3.org

Tas noteikti nav glīts, bet, kamēr enkura tagos nav labs atbalsts atribūtam referrerpolicy, tas varētu būt vienīgais veids. Pirms šī risinājuma izmantošanas es aicinu jūs pajautāt sev, cik svarīgi ir, lai jums būtu šī funkcionalitāte, un vai tas ir tā vērts?

  • 1 Oho, paldies. Tas noteikti ir samocīts un ietver divi tehnoloģijām (php un JavaScript), tā kā es noteikti domāju, ka "tīrs" html (ar zināmu pielabošanu Apache / Nginx / Windows Server, visbeidzot) pastāvētu. Tas noteikti ir ģeniāli, lai gan es par to nebūtu domājis.
  • Thans @ Clément - iespējams, ir kāds vienkāršāks ceļš, taču šobrīd tas ir vienīgais risinājums, ko es varu iedomāties. Es turpināšu to apdomāt un sazināties ar jums, ja izdomāšu ko citu.
  • @ Clément Esmu pievienojis vēl vienu metodi, kas varētu būt vēlamāka. Es izmantoju tīkla paneli Chrome izstrādes rīkos, lai noteiktu, kāda galvene tiek nodota, un šķiet, ka tas arī darbojas.
  • 1 Vēlreiz paldies, ka dalījāties ar savu ideju, Džoš. Es neatzīmēju jūsu atbildi kā pieņemtu, jo es patiešām ceru, ka pastāv kāds jaukāks risinājums, bet jūs esat pelnījuši šo devību.
  • 1 Es domāju, ka tā, bet domāju, ka es dodu iespēju webmasters.stackexchange.com! Es domāju, ka šis jautājums šeit vairāk atbilst likumprojektam un netiks pārsūtīts pa pastu, bet, ja vēlaties, dariet to brīvi. Informējiet mani ;-) Es nedaudz mainīju savu jautājumu, padarot to vairāk orientētu uz servera konf. Ignorēšanu, lai jūs pat varētu uzdot savu jautājumu, neesot šī jautājuma dublikāts.

Jūs varat mēģināt šādā veidā, lai gan es neesmu pārliecināts, vai tas tiek plaši atbalstīts

 link 
  • 4 Relam rel nav tādas vērtības kā “dofollow”
  • Tātad ... vērtība dofollow nepastāv, turklāt risinājums vienkārši nedarbojas, tāpēc es nedomāju, ka tas ir patiešām noderīgs ieguldījums. Bet vienalga paldies.

strādāja par jums: Charles Robertson | Vēlies ar mums sazināties?