Arm1.ru

Обрезание слэша в url с 301 редиректом

А собственно почему бы и не повесить этот тут, потом будет легко найти, когда опять понадобится. Зачастую поисковики воспринимают страницы вида

arm1.ru/blog/yandex-upal-panika-v-twitter

и

arm1.ru/blog/yandex-upal-panika-v-twitter/

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

<?php

# убираем QUERY_STRING строку из REQUEST_URI
$uri = $_SERVER['REQUEST_URI'];
if ( false === empty( $_SERVER['QUERY_STRING'] ) )
    $uri = str_replace( '?' . $_SERVER['QUERY_STRING'], '', $uri );
			
# переадресация через 301 редирект при присутствии слэша в конце $uri
if ( substr( $uri, -1 ) == '/' && strlen( $uri ) > 1 ) {
    $queryString = '';
    if ( false === empty( $_SERVER['QUERY_STRING'] ) )
        $queryString = '?' . $_SERVER['QUERY_STRING'];
 
    header( 'Location: ' . substr( $uri, 0, -1 ) . $queryString, true, 301 );
    exit;
}
comment comments

Резюме встречи Apple Developers Community #7

Побывал сегодня на Apple Developers Community #7. Рассказывали про продвижение ios-приложений. По сути докладывались два человека - представитель компании Nevosoft, которая, похоже, на конвейере фигачит игры, и один инди-разработчик.

Читать далее...

comment comments

Отправка сообщений в Twitter через php

Давно хотел выложить свой простенький набор функций для отправки твитов в Twitter. Может кому полезно будет, т.к. мне не сразу всё далось, особенно формирование подписи. Плюс это моя попытка закрепить в голове то, что было познано и закодено. По-моему нет лучше способа это сделать, чем попытаться кому-то это объяснить :) Под катом описание и код.

Читать далее...

comment comments

Проблемы с PUT при обновлении CouchDB до 1.1.0

Сегодня обновили на продакшн-сервере CouchDB до версии 1.1.0. Столкнулись с проблемой - PUT-запросы не работали, возвращали странную ошибку:

[error] => unknown_error
[reason] => function_clause

То есть мы не могли обновить ни один документ в БД, но при этом POST-запросы на создание новых документов вполне себе работали.

Выяснилось, что при обновлении CouchDB с младшей версии до 1.1.0 в системе остаётся две версии какого-то модуля (может быть это касается нескольких модулей) - старая, и новая. Эти две версии друг с другом конфликтуют.

Решение оказалось простым, хотя и довольно странным. Нужно найти в системе, где хранятся *.beam файлы (в нашем случае это /opt/couchdb), удалить их (если страшно - то можно переместить), после чего вернуться в папку с исходными кодами CouchDB и выполнить снова команду:

make install
comment comments

Потоковое вещание звука на Mac OS X

Потоковое вещание звука на Mac OS X

Так получилось, что в моей комнате колонки находятся в одной части, а компьютер в другой. Провод от колонок тянуть не представляется разумным. Итак - имеются колонки, wi-fi, а также мобильное устройство с wi-fi (в моём случае iPad, но может подойти всё что угодно, что умеет играть по wi-fi музыку). Вспомнил, что есть замечательная программа Nicecast - с её помощью можно организовать в 1 клик онлайн-вещание. Суть в том, чтобы оставаться за своим рабочим местом и рулить музыкой за ним, но играла она в колонках на другой стороне. Кому-то покажется, что проще провод протянуть, но... Fuck yeah, почему бы не заморочиться?

Читать далее...

comment comments

Пара настроек FCKEditor

Пара настроек FCKEditor

В качестве шпаргалки - чтобы быстро настроить FCKeditor. Хоть он уже и устарел и разработчики делают CKEditor - но в нём нет бесплатного файлового менеджера, а в CKEditor - есть.

Это что-то вроде шпаргалки для быстрого подключения FCKEditor.

Читать далее...

comment comments