Как определить, кто переадресовывает поисковый запрос на мой сайт?

Хорошо, если вы пробовали то, что вам сказали выше или ранее (это возможные причины), и он по-прежнему отображает код вместо его выполнения, тогда есть одна вещь, которую вы делаете неправильно, которая не была устранена , URL-адрес, который вы использовали для доступа к вашему php-коду; некоторые люди пытаются выполнить свой php-код, просто перетащив файл .php в веб-браузер. это неправильная практика и может привести к этой проблеме. если вы сохранили файл как «test.php» в папке C: // wamp / www, вы должны получить доступ к этому файлу следующим образом: localhost: //test.php. такая ошибка возникает при доступе к ней следующим образом: localhost: //wamp/www/test.php

Надеюсь, я помог кому-то там. o / ~ Daniel

13
задан Steve 13 February 2010 в 10:40
поделиться

5 ответов

Проработав более 5 лет с поисковыми системами, я могу сказать вам, что стандартного способа получить значение запроса не существует.

Как уже было сказано в других ответах, первым шагом является проверка заголовка HTTP_REFERER . Предполагая, что вы используете Rails, вы можете получить его из запроса

request.referrer

. В противном случае вам нужно извлечь его из заголовков запроса другим способом.

Когда у вас есть реферер, у вас есть 3 основных возможности:

  1. переменная пуста. извините, вы ничего не можете сделать
  2. переменная не пуста, это переменная поисковой системы
  3. не пуста, это не поисковая машина

Первый вариант прост. Вы хотите знать, является ли реферер поисковой системой. Если да, то вам нужно извлечь запрос.

Самый распространенный способ сделать это - использовать контрольный список. Контрольный список обычно представляет собой список ключей / значений, где ключ - это домен поисковой системы, а значение - имя параметра строки запроса, который содержит значение запроса.

google.com,q
yahoo.com,p
...

Такой же подход используется в Google Analytics. Из файла ga.js

g.T=l("daum:q,eniro:search_word,naver:query,images.google:q,google:q,yahoo:p,msn:q,bing:q,aol:query,aol:encquery,lycos:query,ask:q,altavista:q,netscape:query,cnn:query,about:terms,mamma:query,alltheweb:q,voila:rdata,virgilio:qs,live:q,baidu:wd,alice:qs,yandex:text,najdi:q,aol:q,mama:query,seznam:q,search:q,wp:szukaj,onet:qt,szukacz:q,yam:k,pchome:q,kvasir:q,sesam:q,ozu:q,terra:query,mynet:q,ekolay:q,rambler:words");

Первый узел соответствует ключу и значению, первый выигрывает.

26
ответ дан 1 December 2019 в 19:07
поделиться

Попробуйте Google Analytics. Он даст вам подробную информацию о поисковых системах, поисковых запросах и ссылающихся сайтах.

1
ответ дан 1 December 2019 в 19:07
поделиться

В ruby вы можете получить referrer, сделав

request.referrer

Параметры запроса доступны в ваших представлениях и контроллерах. Если вы хотите увидеть другие параметры, доступные в request, то просто добавьте

<%= request.inspect %>

в одно из ваших представлений и зайдите на страницу, чтобы увидеть их.

3
ответ дан 1 December 2019 в 19:07
поделиться

Как насчет этого?

http://borkware.com/quickies/single?id=73

или этого

http://www.cs.utah.edu/dept/old/texinfo/emacs19/emacs_26.html#SEC184

-121--1309627-
$msg = 
   chr(0x20) // Size = 32 (4+1*28)
  . chr(0x1) // Type = 1
  . chr(0x0) // ReqI=0
  . chr(0x1) // NumC=1
    . chr(0x1) . chr(0x0) // node=1
    . chr(0x2) . chr(0x0)  // lap=2
    . chr(0x3) // puid=3
    . chr(0x5) // pos=5
    . chr(0x10) // info=16
    . chr(0x0) //sp3=0
    . chr(0x0) . chr(0x0) . chr(0x1) . chr(0x0) // x=65536
    . chr(0x0) . chr(0x0) . chr(0x2) . chr(0x0) // y=65536*2
    . chr(0x0) . chr(0x0) . chr(0x3) . chr(0x0)  // z=65536*3
    . chr(0x0) . chr(0x20) // speed=8192
    . chr(0x0) . chr(0x10) // dir=4096
    . chr(0x0) . chr(0x8) // heading=2048
    . chr(0x0) . chr(0x4) // AngVel=1024
;

$IS_MCI = unpack('CSize', $msg);
if ( strlen($msg) < $IS_MCI['Size'] ) {
  die("not enough data");
}
$IS_MCI += unpack('CType/CReqI/CNumC', substr($msg, 1));
$IS_MCI['Info'] = array();

for($i=0; $i<$IS_MCI['NumC']; $i++) {
  $data = substr($msg, 4+($i*28), 28);
  $IS_MCI['Info'][] = unpack('vNode/vLap/CPLID/CPosition/CInfo/CSp3/lX/lY/lZ/vSpeed/vDirection/vHeading/sAngVel', $data);
}
print_r($IS_MCI);

печатает

Array
(
    [Size] => 32
    [Type] => 1
    [ReqI] => 0
    [NumC] => 1
    [Info] => Array
        (
            [0] => Array
                (
                    [Node] => 1
                    [Lap] => 2
                    [PLID] => 3
                    [Position] => 5
                    [Info] => 16
                    [Sp3] => 0
                    [X] => 65536
                    [Y] => 131072
                    [Z] => 196608
                    [Speed] => 8192
                    [Direction] => 4096
                    [Heading] => 2048
                    [AngVel] => 1024
                )

        )

)

. Теперь этот код делает некоторые предположения, которые, возможно, не следует воспринимать как нечто само собой разумеющееся (т.е. добавить гораздо больше обработки ошибок/данных для чтения).

  • Предполагается, что пакет ($ msg) был полностью прочитан до запуска кода. Может потребоваться считывание только тех частей, которые в настоящее время необходимы (тогда не требуется использование substr ()). Или, по крайней мере, будьте готовы к тому, что сообщение может прибыть несколькими порциями.
  • Он также воспринимает параметры размера/количества как само собой разумеющиеся, т.е. не проверяет, являются ли значения допустимыми и достаточно ли данных доступно. Это определенно то, что ты должен изменить. Размер должен быть между 0... 228, NumC должен быть между 0... 8 и оба значения должны соответствовать друг другу и так далее.
  • Также ознакомьтесь с идентификаторами формата, которые я использовал при распаковке (). Для слова я использовал v , которое означает "беззнаковый короткий (всегда 16 бит, маленький порядковый номер байта ). Но для int я использовал l : «signed long (always 32 bit, machine byte order )». Это нормально на моей машине. Но найдите в документации протокола полноту данных.

Данные теста в $ msg взяты из результата

__declspec(align(1)) struct CompCar // Car info in 28 bytes - there is an array of these in the MCI (below)
{
    word    Node;       // current path node
    word    Lap;        // current lap
    byte    PLID;       // player's unique id
    byte    Position;   // current race position : 0 = unknown, 1 = leader, etc...
    byte    Info;       // flags and other info - see below
    byte    Sp3;
    int     X;          // X map (65536 = 1 metre)
    int     Y;          // Y map (65536 = 1 metre)
    int     Z;          // Z alt (65536 = 1 metre)
    word    Speed;      // speed (32768 = 100 m/s)
    word    Direction;  // direction of car's motion : 0 = world y direction, 32768 = 180 deg
    word    Heading;    // direction of forward axis : 0 = world y direction, 32768 = 180 deg
    short   AngVel;     // signed, rate of change of heading : (16384 = 360 deg/s)
};

__declspec(align(1)) struct IS_MCI // Multi Car Info - if more than 8 in race then more than one of these is sent
{
    byte    Size;       // 4 + NumC * 28
    byte    Type;       // ISP_MCI
    byte    ReqI;       // 0 unless this is a reply to an TINY_MCI request
    byte    NumC;       // number of valid CompCar structs in this packet

    CompCar Info[1];    // example: one element, fixed
};

int _tmain(int argc, _TCHAR* argv[])
{
  struct IS_MCI mci = {
    32, 1, 0, 1,
    { 1, 2, 3, 5, 16, 0, 65536, 65536*2, 65536*3, 8192, 4096, 2048, 1024 }
  };

  WSADATA wsaData;
  WORD wVersionRequested = MAKEWORD( 2, 2 );
   int err = WSAStartup( wVersionRequested, &wsaData );
  if ( err != 0 ) {
      /* Tell the user that we could not find a usable */
      /* WinSock DLL.                                  */
      return 1;
  }

  SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  sockaddr_in addr; 
  addr.sin_family = AF_INET;
  addr.sin_addr.s_addr = inet_addr( "127.0.0.1" );
  addr.sin_port = htons( 8081 );
  if ( 0!=connect( s, (SOCKADDR*) &addr, sizeof(addr) ) ) {
    printf("%X ", WSAGetLastError());
    return 0;
  }
  send(s, (const char*)&mci, sizeof(mci), 0);
  shutdown(s, SD_BOTH);
  closesocket(s);
  return 0;
}
-121--4460150-

Проверьте заголовок запроса HTTP Референт ваших посетителей ( $ _ SERVER ['HTTP _ REFERER'] в PHP Это, в 90% всех случаев, даст вам страницу, с которой пришел ваш посетитель. Если это страница поисковой системы, то необходимо декодировать строку запроса ссылки и анализировать данные из нее (обратите внимание, что формат последовательности запроса может измениться).

Это больше работы, чем Google Analytics, и простой пример, который я привел, не дает вам столько данных; но может быть сделано, если вы не комфортно с Google делает сбор данных для вас.

6
ответ дан 1 December 2019 в 19:07
поделиться

Думаю, вам будет очень полезно проверить это. В нем подробно объясняется, как делать именно то, что вы пытаетесь сделать:

http://www.alistapart.com/articles/searchhighlight/

2
ответ дан 1 December 2019 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: