Что такое HTTP 404 все знают. Но не всегда это отсутствие самой страницы, файла. Кто работает с WordPress, могли сталкиваться с проблемой примерно следующего характера.
Из какой-то части своего блог/сайта на WordPress отправляется ajax-запрос на отдельный php файл. На сайте включены permalinks. Файл возвращает ответ, все хорошо, но с ошибкой 404. Поэтому ваш скрипт не обрабатывает ответ, даже если там все ок. Это часто проявляется на серверах lighttpd.
Ковырять без того уродливые конфиги lighttpd, пробовать mod_magnet и lua скрипты для настройки пермалинков — это геммор еще тот, тем более, для не знающего человека. WordPress в принципе в состоянии сам решить все эти проблемы.
Для тех, кто испытывал(ет) аналогичную проблему, делюсь простым решением:
add_filter('status_header', 'rw_hack_404', 10);
function rw_hack_404($c) {
if (defined('HACK_404')) {
$header = '200';
$text = get_status_header_desc($header);
$protocol = $_SERVER['SERVER_PROTOCOL'];
if ('HTTP/1.1' != $protocol && 'HTTP/1.0' != $protocol)
$protocol = 'HTTP/1.0';
return "$protocol $header $text";
}
else {
return $c;
}
}
Копируем, вставляем в functions.php. А в файле для запроса в самое начало добавляем:
define('HACK_404', true);
require($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php');
# ваш код
Все!
Читая сегодня подписки, обратил внимание на эту фотоподборку самых красивых дорог в мире. Примечательно, что на русских сайтах копипастерах этого фотосэта еще не было. Поэтому публикую его у себя полностью с переводом капшонов на русский.
Детские коляски.
Купить коляску для вашего чада в Украине.
Фирменные бытовые
фильтры для воды по доступным ценам. Специальные системы очистки воды.
Вакансии, предложения,
работа Севастополь. Доски объявлений.
Для тех, кто сомневался. Чили на 30ом месте (первая из Лат. американских стран в списке), Перу 42ое, Уругвай 44, Мексика 45, Аргентина 46, Бразилия 48, Россия 51.

Подробнее тут (англ).
Постовые
Профессиональные
тренажеры для дома в спортивном магазине UA Fitness.
Качественная
одежда для рыбаков, кемпинговое снаряжение.
Модная
летняя женская обувь из США и Европы со скидкой.

Делаю кросс-пост одной моей хорошей знакомой.
Друзья! 8 хороших людей собрались в ноябре в путешествие по Аргентине, но по уважительной причине теперь их всего 5, они веселы, умны, любят путешествия, программа составлена индивидуальная и очень интересная, в общем все хорошо, но им нужны попутчики, человека 3-5.
Может быть кто-то из вас, ваших друзей, коллег и т.д. захочет к ним присоединиться на всем маршруте или на его части, если три недели найти не выйдет.
Программа такая: история и танго в Буэнос-Айресе — кайманы и капибары на болотах Ибера — иезуитские руины и водопады Игуасу — те же водопады с бразильской стороны (благо отменили визу) — Сальта и археология ущелья Умауака — двухдневное сафари на уникальных грузовиках Мовитраках по Альтиплано с подъемом на 4300м — трекинг по леднику Перито-Морено в Калафате — заповедник Лос-Гласьярес — наблюдение китов вблизи п-ва Вальдес, пингвинов на мысе Томбо и тысяч других животных и птиц — Б-А.
Писать сюда contacto@imaginasur.cl или мне в личку и я свяжу вас с кем нужно.
Кто-то ноет, что все плохо, кто-то пожары тушит, а кто-то снимает. Пред-пятничный креатив на тему смога. Оба ролика офигенны.
Романтика

Брутальная версия

Постовые
Международные
контейнерные перевозки грузов, перевозка опасных грузов.
Интернет
трейдинг с минимальными рисками. Начни зарабатывать прямо сейчас.
Morpher — is new software
protection copy service. Keep you software secure.
Принимая во внимание рекомендации и фидбеки к примеру функции для сео-заголовков, публикую код улучшенной функции.
function seo_title() {
global $page, $paged;
$sep = " | "; # разделитель
$newtitle = get_bloginfo('name'); # заголовок по умолчанию
# Страница поста ##################################
if (is_single() || is_page())
$newtitle = single_post_title("", false);
# Категории ######################################
if (is_category())
$newtitle = single_cat_title("", false);
# Таги ###########################################
if (is_tag())
$newtitle = single_tag_title("", false);
# Результаты поиска ################################
if (is_search())
$newtitle = "Результаты поиска: " . $s;
# Taxonomy #######################################
if (is_tax()) {
$curr_tax = get_taxonomy(get_query_var('taxonomy'));
$curr_term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy')); # current term data
# if it's term
if (!empty($curr_term)) {
$newtitle = $curr_tax->label . $sep . $curr_term->name;
} else {
$newtitle = $curr_tax->label;
}
}
# Добавить номер страницы, если нужно
if ($paged >= 2 || $page >= 2)
$newtitle .= $sep . sprintf('Страница %s', max($paged, $page));
# Home & Front Page ########################################
if (is_home() || is_front_page()) {
$newtitle = get_bloginfo('name') . $sep . get_bloginfo('description');
} else {
$newtitle .= $sep . get_bloginfo('name');
}
return $newtitle;
}
Заменять стандартную функцию wp_title () на нашу мы теперь не будем, а добавить фильтр там же в functions.php:
add_filter('wp_title', 'seo_title');
Изменения и дополнения:
- Более читабельный код.
- get_bloginfo ('name') ушло в конец функции.
- В Home & Front Page добавил описание блога.
- Добавил номера страниц в wp_title () там, где нужно.
- Разделитель в отдельной переменной.
- Убрал лишний текст из заголовков.
- Вывод функции теперь через add_filter ()
Я не люблю прибегать к лишним плагинам, которые не факт, что хорошо написаны. Поэтому в своих шаблонах я использую код, написанный собственными ручками. В том числе, для генерирования сео-заголовков в «шапке». Делюсь с читателями примером исходничка.
function seo_title() {
$std_title = get_bloginfo('name'); # задаем новый заголовок по умолчанию
/* главная */
if (is_home()) { $newtitle = $std_title; }
/* пост или статичная страница */
if (is_single() || is_page()) { $newtitle = single_post_title("", false) ." - ".$std_title; }
/* просмотр категории */
if (is_category()) { $newtitle = "Вы просматриваете архивы категории <<" . single_cat_title("", false). ">> на " .$std_title; }
/* просмотр архивов по тагу */
if (is_tag()) { $newtitle = "Вы просматриваете архивы по тагу <<" .single_tag_title("", false). ">> на " .$std_title; }
/* результаты поиска */
if (is_search()) { $newtitle = "Результаты поиска по запросу '" . $s. "' - " .$std_title; }
/* custom taxonomy & term */
if (is_tax()) {
$curr_tax = get_taxonomy(get_query_var('taxonomy'));
$curr_term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy')); # current term data
# if it's term
if (!empty($curr_term)) {
$newtitle = $curr_tax->label . " >> ". $curr_term->name ." - " .$std_title;
} else {
$newtitle = $curr_tax->label ." - " .$std_title;
}
}
return $newtitle;
}
Эту функцию можно совершенствовать до беспредела на ваше усмотрение. А использование очень простое. Во-первых, скопируйте ее в functions.php. И потом исправьте в header.php таг title на следующее:
<title><?php echo seo_title(); ?></title>
Улучшенная функция и ее обсуждение теперь по этой ссылке. Спасибо!
Час за часом, день за днем, время идет, мир на месте не стоит и организация съемок для чилийской экспедиции идет полным ходом. Есть хорошие новости, есть и плохие. Начну с последнего.
К сожалению, одна из компаний потенциальных спонсоров, на которую я лично возлагал очень большие надежды не сможет проспонсировать ни в каком виде мою поездку и съемки передачи. Хотя по сути нужно было только треккинг экипировка на двоих членов экипажа. Жаль.
Также чилийский Ford был упущен временем и теперь стало на одного автогиганта меньше.
Теперь немного позитива.
Я не случайно использую слово «экспедиция» в этом посте, так как съемки передачи уже переросли в настоящую этнографическую экспедицию. В сотрудничестве с одной крупной маркетинговой компанией в Чили съемки моей передачи были проработаны в более интересный, креативный и потенциально прибыльный проект — этнографическая экспедиция Чили 2010, которая будет делаться в рамках культурного обмена между Россией и Чили.
Пока еще непонятно каким образом можно заинтересовать российское консульство моим проектом, но над этим уже работаем, так сказать.
И если все срастется как планируется, то проект будет офигенно интересный. Реально, сейчас в разработке очень много идей для этой поездки. Есть все предпосылки, что поездка будет освещаться онлайн через twitcam и другие онлайн-средства.
В ближайшем посте я расскажу о плане поездке, поделюсь идеями, маршрутом и некоторыми наработками. А пока удаляюсь на дальнейшие поиски партнеров и спонсоров.
Если кто-то работает в таких компаниях, как Sony, Canon, Nikon, автодилеры, туристические компании и заинтересованы в сотрудничестве, то пишите мне на почту или звоните в скайп: slaffster и попытаемся найти общие интересы и выгоды.
Не скрою, есть огромное желание потестировать фото и видео технику, в том числе новую соньку и Canon 7D :)
Если вы стали замечать, что ваш блог стал тормозить в последнее время. Если вы получаете фидбеки от читателей, что ссылки на отдельные записи редиректят куда-то налево. То скорее всего ваш бложик хакнули новым эксплоитом через какой-нибудь плагин. Если вас хакнули и у вас стоит последняя версия WordPress (3.+), то в дашборде в quickpress скорее всего вы увидите следующую картину:
Вариации таких урлов в теге script могут быть разные. На текущий момент известны эти:
- ae.awaue.com/7
- ie.eracou.com/3
- ao.euuaw.com/9
- ue.oeaou.com/31
Лечится в общем-то очень просто, но нужно иметь некоторые навыки по работе с базой данных и консолью. Первым делом — сделать бекапы базы данных и инсталяции WP. Далее, в базе нужно запустить следующую команду:
UPDATE wp_posts SET post_content = replace( post_content, '<script src="http://ae.awaue.com/7"></script>', ' ')
Обратите внимание на префикс wp_posts. Замените «wp_» на префикс своих таблиц (это вы ставили в wp-config.php при установке блога).
Те, кто хостятся на MediaTemple, могут проверить все свои домены разом через консоль:
cd ~/domains/ && for x in `find . -type f -perm -u+r -name "wp-config.php" 2>/dev/null`; do if mysql -u`egrep DB_USER $x | awk -F\' '{print $4}'` -hinternal-db.s`echo $HOME | awk -F/ '{print $3}'`.gridserver.com -p`egrep DB_PASSWORD $x | awk -F\' '{print $4}'` `egrep DB_NAME $x | awk -F\' '{print $4}'` -e "select post_content from `egrep table_prefix $x | awk -F\' '{print $2}'`posts;" | egrep -q "(ae\.awaue\.com/7|ie\.eracou\.com/3|ao\.euuaw\.com/9)" 2>/dev/null; then mysql -u `egrep DB_USER $x | awk -F\' '{print $4}'` -h internal-db.s`echo $HOME | awk -F/ '{print $3}'`.gridserver.com -p`egrep DB_PASSWORD $x | awk -F\' '{print $4}'` `egrep DB_NAME $x | awk -F\' '{print $4}'` -e "UPDATE `egrep table_prefix $x | awk -F\' '{print $2}'`posts SET post_content = replace(replace(replace( post_content, '<script src=\"http://ae.awaue.com/7\"></script>', ''), '<script src=\"http://ie.eracou.com3\"></script>', ''), '<script src=\"http://ao.euuaw.com/9\"></script>', '');" 2>/dev/null; echo -e "\n$x - Redirect Exploit cleaned in database `egrep DB_NAME $x | awk -F\' '{print $4}'`"; fi; done;
Если кому-то нужна помощь по лечению эксплоита, хотите проверить свой блог, то за простое «спасибо» в качестве постового у вас в блоге, помогу с удовольствием :).
Так в большинстве стран, городах у тебя могут попросить сигаретку. В Чили я заметил одну забавную, вызывающую улыбку умиления, вещь. Уже не раз у меня подходили спросить сигаретку, даже в любимом Openbox'е. И всегда предлагают деньги, кто 100 песо, кто больше.
Так вот сейчас пока ходил обедать, подходит чувачок уличный артист и просит продать ему сигаретку и пихает деньги в руки. Судя по количеству монет, там была 1/5 стоимости пачки. Я не взял, конечно. Отмечу, что пачка Кента стоит USD4.00, а другая самая дешевая чуть более USD3.00.
Просто сам факт забавный. Вот такое оно Чили. О других интересностях про эту страну, можете почитать, проследовав по этой ссылке.