2011-11-19 40 views
9

Ho un servizio di direzione di collegamento sicuro che sto utilizzando (expiringlinks.co). Se cambio le intestazioni in php per reindirizzare i miei visitatori, poi Facebook è in grado di mostrare un'anteprima del sito web a cui mi sto reindirizzando quando gli utenti inviano link tra loro tramite Facebook. Vorrei evitare questo. In questo momento, sto usando una chiamata AJAX per ottenere l'URL e il javascript per reindirizzare, ma sta causando problemi agli utenti che non usano javascript.Blocca Facebook dal mio sito web

Qui ci sono un certo numero di modi che vorrei bloccare facebook, ma io non riesco a ottenere lavoro:

  1. ho provato bloccando il bot facebook (facebookexternalhit/1.0 e facebookexternalhit/1.1) ma non funziona, non penso che li stiano utilizzando per questa funzionalità.

  2. Sto pensando di bloccare gli indirizzi IP di Facebook, ma non riesco a trovarli tutti e non penso che funzionerà a meno che non li ottenga tutti.

  3. Ho pensato di usare un CAPTCHA o anche un pulsante, ma non posso portarlo a farlo ai miei visitatori. Per non parlare del fatto che nessuno avrebbe mai usato il sito.

  4. Ho cercato i documenti di Facebook per i metatag che avrebbero "disattivato", ma non ne ho trovato uno, e dubito che mi sarei fidato se avessi avuto.

Qualche idea creativa o idea di come implementare quelle sopra? Grazie mille in anticipo!

+1

Come sei venuto a conoscenza '(facebookexternalhit/1.0 e facebookexternalhit/1.1)'? È stato tramite i loro documenti o gli agenti utente dei visitatori sono stati scaricati? Personalmente proverei a creare un log di tutti gli user-agent di tutti gli utenti e quindi a creare un link e a ottenere da Facebook l'anteprima di questo link. Se ne trovi uno che potrebbe essere per Facebook, bloccalo, guarda cosa succede. Facebook usa anche diversi URL che fungono da proxy per i contenuti esterni, come 'http: // external.ak.fbcdn.net/safe_image.php' –

+0

Ho letto dei bot online, dai loro documenti e da altre fonti. Sto usando Piwik per l'analisi e non riesco a rilevare Facebook quando condivido i collegamenti. Non sono sicuro di capire cosa intendi per URL come proxy. –

+0

Utilizzano script da domini diversi dal loro dominio "facebook.com" per caricare i tuoi contenuti. Mettono anche in cache il contenuto e se viene richiesto di nuovo lo stesso contenuto (come l'immagine), Facebook caricherà la versione cache invece della versione. Potrebbe anche essere in gioco qui se stai cercando di collegarti allo stesso URL più di una volta. –

risposta

2

Prova questo - funziona per me ...

<?php 
$ua = $_SERVER['HTTP_USER_AGENT']; 

if (preg_match('/facebookexternalhit/si',$ua)) { 
header('Location: no_fb_page.php'); 
die() ; 
} 

?> 
+0

BELLISSIMO! Grazie mille! –

+0

Prego :) –

0

Si potrebbe provare a ottenere il file di registro del server Web e cercare lì useragents insoliti. (magari contenente facebook) Oppure, in alternativa, recupera i registri ed elimina tutti quelli che contengono internet explorer/firefox/opera ... Quindi dovresti avere solo bot di utente alla fine. Quindi è possibile cercare quello di Facebook.

0

Tutto ciò che devi fare è impostare correttamente robots.txt.

http://www.robotstxt.org/robotstxt.html

+0

... a condizione che Facebook rispetti effettivamente queste regole. È il caso? – glglgl

+0

@glglgl, non l'ho provato, ma sarei seriamente scioccato se un giocatore così importante online non seguisse qualcosa di semplice come 'robots.txt', se non altro per ragioni legali legate all'indicizzazione e all'archiviazione del contenuto da altri siti. Se l'hai provato e sai diversamente, per favore pubblica. – Brad

+1

Non lo so neanche io, ma mentre 'robots.txt' è piuttosto semplice, non è affatto uno standard, e non penso che potrebbero essere accusati legalmente di non usarlo. E poiché non si preoccupano affatto della privacy, non sono sicuro che lo faranno se gli viene semplicemente detto da un 'robots.txt'. Se ho torto, abbiamo fortuna ... – glglgl

0

Si potrebbe provare a utilizzare un aggiornamento di meta, invece di un redirect javascript. Funzionano per tutti i browser e poiché la pagina restituisce ancora 200 risposte, qualsiasi crawler dovrebbe smetterla di risolverlo.

+0

Mi piace il tuo approccio, ma non posso fare a meno di pensare che se il crawler di collegamento di Facebook rileva il reindirizzamento delle intestazioni HTTP, perché non rilevare anche i reindirizzamenti META? –

+0

Poiché le intestazioni HTTP vengono inviate come parte della risposta, che il bot deve comprendere per funzionare, il meta refresh è lato client e richiederebbe al bot di analizzare la risposta e identificare l'aggiornamento. Ovviamente qualcosa che potrebbe fare, ma se stavo scrivendo un bot per risolvere gli URL potrei dire che smettesse di risolversi una volta ricevuta una risposta di 200. Vale la pena andare comunque. – alexarno

+0

Ora un giorno, anche Facebook si sta facendo furbo per identificare il tag meta refresh. – Goyllo

Problemi correlati