Паранойя опять...
Просто полно допустим форм поиска которые отправляют в 1251, кстати и ya.ru тоже пока 1251 отправляет. При дальнейшей уже работе с поиском, когда реферер и accept charset позволяют - видно utf
Любителям массового парсинга выдачи это не может помешать.
P.S. Подскажите, если не трудно, другой способ нежели использование utf-8, если надо на одной странице показывать содержимое на разных языках, например китайском и русском. Кажется, у яндекса появилась возможность брать в индекс документы с иероглифами :) зря чтоль ДЦ открыли...
CNstats и прочие подобные можно подлатать пока апдейт не вышел.
if( utf8_compliant($string) ) {
$string=iconv("UTF-8","WINDOWS-1251",$string);
}
function utf8_compliant($str) {
if ( strlen($str) == 0 ) return true;
return (preg_match('/^.{1}/us',$str) == 1);
Ну или как-то так, в зависимости от целей.
делал недавно переход на новую структуру - сначала создал новую структуру поверх старой, со старой ссылки на новую. постепенно по мере тестирования убивал старые страницы/папки целиком и ставил 301 редирект. где-то за месяц всё проиндексировалось, трафик не падал вообще.
Или, что может быть даже лучше - арендовать самый маленький vps у российского хостера и повесить вторичный ДНС.
Может, дело не столько в DNS сколько в неумеренном бане сеток некоторыми местными провайдерами?
Со своей стороны - FTP и БД пароли к соим серверам не даю вообще. Для оптимизаторов есть волшебная кнопка позволяющая редактировать мета- и специальную (дополнительную к контенту) текстовку на абсолютно любой странице сайта. Если надо - даётся пароль редактора, для добавления текстов на сайт. И никаких посторонних телодвижений на сервере. Если сайт клиента сидит где-то на стороне - это уже его проблемы, давать/не давать.
п.с. мне кажется, если оптимизатору нужен фтп доступ и без него никак - это признак некачественно сделанного сайта.
Господа, при 304 как раз ОБЯЗАТЕЛЬНО делать exit !
Но надо учитывать что 304 отдаётся в ответ на запрос содержащий заголовок If-Modified-Since. Примеров правильной логики обработки такого запроса масса.
Вот например кусочек кода... по мотивам обсуждения на xpoint.ru
В начале разбираемся какой заголовок отдать...
А в конце отдаём...
// Conditional GET // Если Conditional Get не задан - просто отдаем файл. if (!isset($_SERVER['HTTP_IF_NONE_MATCH']) && !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { $return=200; //echo "<br>_none"; // Conditional GET задан, проверка только по If-Modified-Since: } elseif (!isset($_SERVER['HTTP_IF_NONE_MATCH']) && isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { //echo "<br>_first"; $unix_ims = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']); //echo "<br>".$unix_ims; // если ошибка Conditional GET - просто отдаем файл. if ($unix_ims > time() || !is_int($unix_ims)) { $return=200; //echo "<br>bad date"; // Conditional GET корректен. } else { //echo "<br>good date"; if ($unix_ims >= $main['timestamp']) { $return=304; } else { $return=200; } } // Conditional GET задан, проверка только по If-None-Match: } elseif (isset($_SERVER['HTTP_IF_NONE_MATCH']) && !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { //echo "<br>_second"; $INM = split('[,][ ]?', $_SERVER['HTTP_IF_NONE_MATCH']); // массив значений If-None-Match foreach($INM as $enity) { // если копия файла в кеше клиента не устарела if ($enity == "\"$page_hash\"") { $return=304; } } // проверка и по If-Modified-Since, и по If-None-Match: } elseif (isset($_SERVER['HTTP_IF_NONE_MATCH']) && isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { $unix_ims = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']); // значение If-Modified-Since в UNIX формате $INM = split('[,][ ]?', $_SERVER['HTTP_IF_NONE_MATCH']); // массив значений If-None-Match // Ошибка Conditional Get - просто отдаем файл. if ($unix_ims > time() || !is_int($unix_ims)) { //echo "<br>bad get"; $return=200; // Conditional GET корректен. } else { foreach($INM as $enity) { // если копия файла в кеше клиента не устарела if ($enity == "\"$page_hash\"" && $unix_ims >= $FILE_INFO[2]) { $return=304; } } } } session_write_close(); header("X-Powered-By: chetyre tarakana i sverchok"); // может и зря пыжились, вдруг это вообще 404 ? if ( $template=='404' ) { $return=404; header("Content-Type: text/html; charset=utf-8"); header("Last-Modified: " . gmdate("D, d M Y H:i:s",time())." GMT"); header("HTTP/1.1 404 Not Found"); ob_end_flush(); } elseif ( $return==304 ) { header("HTTP/1.1 304 Not Modified"); header('ETag: "'.$page_hash.'" '); // сброс буфера while(ob_get_level()) ob_end_clean(); exit; //по умолчанию 200 } else { header("Content-Type: text/html; charset=utf-8"); header('ETag: "'.$page_hash.'" '); header("Last-Modified: " . gmdate("D, d M Y H:i:s",$main['timestamp'])." GMT"); header('Expires: '.gmdate("D, d M Y H:i:s", $expiries).' GMT'); ob_end_flush(); }
Для правильной обработки надо знать реальное время последнего изменения страницы. Как дополнительная мера - для роботов отдавать заголовок Expiries с текущим временем+скажем неделя. На проиндексированность сайта не влияет, а вот трафик экономит прилично.
Не удержусь, встряну. Slackware 11
Причина - апдейты через slackbuild скрипты, удобно и софт получается компилированный из исходников.
это из-за первого объявления маркета, там длиннющий текст ссылки без пробелов
косяк-с
а кое-кто поедет менять "перегретые" винты, хорошо у человека RAID стоял правильный...
Пользуюсь только FireFox+KeeperLight, для моих скромных задач болоее чем достаточно.