Ну вот, когда коту делать нечего - он сидит и ... кодит
Занялся 3-м вариантом
В дефолтном блоке есть .htaccess:
RewriteEngine on Options +FollowSymlinks RewriteBase / RewriteCond %{REQUEST_URI} !^(.*)/index\.php.* RewriteRule (.*) /index.php [R=301,L]
В index.php (единственный файл который выводится всегда и на который соответственно редиректится все) в конце добавил
<?php $f=fopen("log\my.log",'a'); flock ($f,2); $HDate=Date('Y-m-d H:i:s'); fwrite($f,"--- $HDate\n"); foreach (getallheaders() as $name => $value) { fwrite($f,"$name: $value\r\n"); }; fwrite($f,"\r\n"); fclose($f); ?>
Ввел несуществующий поддомен+несуществующую страницу zzz.site.ru/pageX.php, соответственно перебросило на zzz.site.ru/index.php
В my.log увидел аж три записи:
--- 2013-10-04 01:23:11 Host: zzz.site.ru Connection: keep-alive Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36 Accept-Encoding: gzip,deflate,sdch Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 --- 2013-10-04 01:23:11 Host: zzz.site.ru Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36 Accept: */* Referer: http://zzz.site.ru/index.php Accept-Encoding: gzip,deflate,sdch Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 --- 2013-10-04 01:23:11 Host: zzz.site.ru Connection: keep-alive Accept: */* User-Agent: Mozilla/5.0 (Windows NT 6.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36 Accept-Encoding: gzip,deflate,sdch Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Пока не понял, с чем связано 3 записи - м.б. установленный у меня RDS бар
Зато вот пошел BingBot:
access.log:
157.56.93.83 - - [04/Oct/2013:01:24:58 +0400] "GET /pageN.php HTTP/1.1" 301 342 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.reg1.site.ru" "-" "-"
А вот что этот гаденыш оставил в my.log (всего 1 запись)
--- 2013-10-04 01:24:58 Cache-Control: no-cache Connection: Keep-Alive Pragma: no-cache Accept: */* Accept-Encoding: From: bingbot(at)microsoft.com Host: www.reg1.site.ru User-Agent: Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
Для www.reg1.site.ru четко прописана секция в httpd.conf, но понятно, что он туда не попадает.
izbushka, Sanches27, уважаемые, есть мысли?
BingaBonga - точняк: в Verify Bingbot Tool проверил IP - действительно признали своего
Если бы в Host стоял тупо наш IP - он бы попал в Default, но HOST в логе остался бы. Глянул только что логи - реденько так попадаются Host="xxx.xxx.xxx.xxx:80" в основном школьники ломятся к phpMyAdmin
Если бы с того же IP бота не проходили и корректные запросы - грешил бы на Апач.
Но ведь он паразит просит разные поддомены (версия, что просят просто IP отпадает - Host показывал бы первый дефолтовый домен)
Redirect на основной домен ставить не хочется - ибо нефиг через IP лазать!!! :)
Спасибо за направления, кое-что критичное подправил, остался уже чисто академический интерес.
Получится разобраться и победить - отпишусь!!!---------- Добавлено 03.10.2013 в 21:50 ----------
User-agent: bingbot User-agent: msnbot Allow: / Crawl-delay: 3
Спасибо за помощь, отвечаю:
1 Изменений не было около полугода (apache, php, hosts, mysql, .htaccess)
2 Редиректов не было нигде
3 ПОЖАЛУЙ ВОСПОЛЬЗУЮСЬ!!! Как понял - запись в файл значений getallheaders()
4 У поддоменов один IP. DNS не менялся, хостер тот же, сервер свой Collocation. Правда месяц назад хостер собирался менять свои маршрутизаторы, хабы или еще какое-то труднопроизносимое :)
5 Слушает только 80 порт, соответственно выдает Веб страница недоступна
6 Когда что - просит разные страницы разных поддоменов. Системы для "поломки" уловить не смог
Дефисы - это мне показалось, что так будет читабельнее и красивше:)
Crawl-delay энто здорово, но на сотне поддоменов он же эти 3 секунды для каждого брать будет.
P.S. соберусь с мыслями и воспользуюсь советом №3 - главное, чтоб этот подлец никуда не сбег. А то сейчас глянул логи - с 18:00 не появлялся. Может рабочий день у него закончился:)
Внимательно-внимательно прочитал обе ссылки плюс "вправо-влево" от них. В довесок ко всему еще раз глянул логи.
Статьи 100%-ной ясности не внесли. Туманно маячит, что у запросов от бота которые вылетели мог быть некорректно сформулирован заголовок и соответственно HTTP_HOST Апачем не вырезался (при том, что параметр Host в заголовке присутствует) - как итог ошибка 404. Бот с того же IP адреса через некоторое время передает запрос, который абсолютно корректно отрабатывается.
Посмотрел копии логов с начала года - такая ситуация пошла с середины сентября (никаких изменений последние полгода не вносилось)
На итог получается - BingBot'ом так и задумано, значит ошибка 404 есть правильно.
Братцы, развейте сомнения, скажите что я молодец, все понял правильно и наконец-то могу взять с полки пирожок :)
Так в том-то и загвоздка, что для access.log прописал формат записи с выводом Host, HTTP_HOST, SERVER_NAME:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Host}i\" \"%{HTTP_HOST}e\" \"%{SERVER_NAME}e\"" combined
А этот паразит в некоторых случаях где-то теряет HTTP_HOST (с Ваших слов понял, что может быть проблема в Apache)
- 157.55.32.100 - - [02/Oct/2013:18:36:08 +0400] "GET /page1.php?id=1 HTTP/1.1" 200 5122 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.reg1.site.ru" "www.reg1.site.ru" "www.reg1.site.ru"- 157.55.32.100 - - [02/Oct/2013:18:36:08 +0400] "GET /page2.php?id=2 HTTP/1.1" 200 4864 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.reg2.site.ru" "www.reg2.site.ru" "www.reg2.site.ru"- 157.55.32.100 - - [02/Oct/2013:18:35:53 +0400] "GET /page3.php?id=3 HTTP/1.1" 404 315 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.reg3.site.ru" "-" "-"- 157.55.32.100 - - [02/Oct/2013:18:35:53 +0400] "GET /page4.php?id=4 HTTP/1.1" 404 315 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "www.reg4.site.ru" "-" "-"
Т.е. по логам - 1, 2 запись - все отработало правильно, Apache перешел в соответствующую директорию c:/www/reg - где обрабатываются все регионы
А вот 3 и 4 запись - показывают пустой HTTP_HOST, но не пустой Host www.reg3.site.ru и www.reg4.site.ru Соответственно переходят в дефолтную директорию, где и получают свою законную 404 страничку.
UseCanonicalName стоит Off.
По ходу общения с Вами, существенно сузился круг подозреваемых :)
Вопрос уже получается следующий: почему у части запросов от BingBot "теряется" HTTP_HOST, при непустом Host?
По пунктам:
1. В дефолтной директории посмотрел - упустили - нет 404 страницы - вываливается Апачевский 404 NotFound
2. Заменить исключительно с тем, чтобы правильно отработать - если бот стучится по адресу: www.reg1.site.ru/page1.php, чтобы ему соответственно выводилась страничка page1 данного региона.
Похоже объясняльщик из меня хреновый:)
Попробую еще лаконичней.
Суть: похоже BingBot периодически передает пустые HTTP_HOST (SERVER_NAME) на все имеющиеся поддомены. При этом Host в заголовке запроса не пустой.
Вопрос:
- это коряво отрабатывает Apache или BingBot преднамеренно подменяет переменную HTTP_HOST
- если это козни бота, то как правильно поступить по теории сайтостроительства:)
а. выдать страницу ошибки и 404 код
б. попытаться отредиректить, подменив пустой HTTP_HOST на известный www.reg1.site.ru
Братцы, неужели ни у кого подобного нет - не поленитесь, гляньте логи?
Точно не оно.
Для IP адреса стоит блок:
<VirtualHost 19X.XXX.XXX.XXX>
ServerAdmin bla-bla-bla
DocumentRoot c:/www/default
ServerName 19X.XXX.XXX.XXX
ErrorLog logs/localhost_error.log
CustomLog logs/localhost_access.log combined
</VirtualHost>
И тогда бы не вылезал конкретный регион---------- Добавлено 02.10.2013 в 22:42 ----------
1. Достучаться можно до обоих, в роботсе прописан главный Host с WWW
в config:
<VirtualHost reg2.site.ru>
DocumentRoot c:/www/reg
ServerName reg2.site.ru
<VirtualHost www.reg2.site.ru>
ServerName www.reg2.site.ru
2. проблема вылезает на всех поддоменах
3. UseCanonicalName Off - присутствует в явном виде, УРЛы не преобразует
4. К сожалению/счастью стоит WinServer 2003 WEB Edition, статью обязательно гляну
Т.е. HOST и HTTP_HOST должны всегда совпадать?
Тогда как получается, что запрос к идентичным страницам настолько разный:
"www.reg1.site.ru" "www.reg1.vedun.ru" "www.reg1.site.ru"
или
"www.reg1.site.ru" "-" "-"
Rewrit'ами не баловался...
Куда копать - ума не приложу...
Да, блин. Прям как в зоопарке - наша ветка вообще не спит 🤪
Только-только начал "прыгать" в баре пока что по части проектов. Какой-то затяжнооооооооой прибалтийский аааааааааапппп :)