Недавно столкнулся с проблемой, когда читатели этого блога могли подписываться на два разных RSS канала, один из которых от FeedBurner, а второй располагался по адресу http://devaka.ru/rss/. В основном подписка на последний фид шла через браузер, когда пользователи кликали RSS иконку в адресной строке и добавляли канал в закладки.

Было решено перенаправлять всех, кто обращается к последнему адресу на http://feeds2.feedburner.com/devaka, так как FeedBurner позволяет очень гибко настраивать канал, смотреть статистику и вообще, проводить хоть какой-то анализ. Поэтому, если внезапно ваш браузер перестал получать обновления этого seo блога, то вам необходимо переподписаться по другому адресу (какому именно см. выше).

Для тех, кто столкнется с подобной проблемой, ниже описывается алгоритм, как сделать перенаправление фида средствами PHP, Apache или Nginx. Для начала немного теории о редиректах RSS каналов.

Существует несколько видов редиректов: обычный серверный редирект c 301-ой ошибкой, XML и HTML редиректы. Для XML, коим является также любой фид (RSS или Atom) это перенаправление выглядит следующим образом:

XML: (XML-редирект старого RSS на новый адрес)
  1. <?xml version="1.0"?>
  2. <redirect>
  3.  <newLocation>http://feeds2.feedburner.com/devaka</newLocation>
  4. </redirect>

Перенаправляя фид таким образом, можно лишиться множество читателей, так как из двух десятков проанализированных RSS ридеров такой вид xml-редиректа поддерживает только NetVibes (возможно, его поддерживают также некоторые мобильные ридеры, в этой области тесты не проводились).

Однако, 301 редирект поддержали 90% приложений, работающих с RSS каналами, к которым относятся:

— браузеры Opera 9, Safari, MSIE7;
— онлайн ридеры Bloglines, NewsGator, Google Reader, RSS I.UA, NetVibes;
— десктопные приложения FeedDemon, Thunderbird, Feedreader, GreatNews, Snarfer, Sharpreader и JetBrains Omea.

Единственные, кто не поддержал ни одного вида редиректа, это Mozilla Firefox 3 (средства закладок) и Яндекс.Закладки, за что Яндексу минус в репу :)

Итак, как же перенаправление фида будет выглядеть в коде? Алгоритм редиректа следующий:
1. Определяем User-Agent обращающегося к RSS каналу приложения;
2. Если обращается сам Feedburner, то оставляем все как есть (User-Agent фидбернера: "FeedBurner/1.0 (http://www.FeedBurner.com)");
3. Остальных редиректим с 301 ошибкой на новый адрес.

Bash: (.htaccess, веб сервер apache)
  1. RewriteEngine On
  2. RewriteCond %{HTTP_USER_AGENT} ^FeedBurner
  3. RewriteRule ^.*$  http://feeds2.feedburner.com/devaka [R=301,L]
Bash: (nginx.conf, веб сервер nginx)
  1. set $feedburner_ua  "FeedBurner/1.0 (http://www.FeedBurner.com)";
  2. set $rss_url  "http://feeds2.feedburner.com/devaka";
  3.  
  4. location ~ /(rss|atom) {
  5.     if ($http_user_agent != $feedburner_ua)
  6.     {
  7.         rewrite ^(.*)$ $rss_url permanent;
  8.         break;
  9.     }
  10.  
  11.     default_type text/html;
  12.  
  13.     if (!-f $request_filename) {
  14.         rewrite ^(.*)$ /index.php last;
  15.         break;
  16.     }
  17.  
  18.     index index.php index.html index.htm;
  19. }
PHP: (index.php, редирект в PHP)
  1. $feedburner_ua = "FeedBurner/1.0 (http://www.FeedBurner.com)";
  2. $rss_url  "http://feeds2.feedburner.com/devaka";
  3.  
  4. if ($_SERVER['HTTP_USER_AGENT'] !== $feedburner_ua)
  5. {
  6.     header("Location: ". $rss_url);
  7.     exit();
  8. }
  • 0 Нет
  • 6 Да
  • Мне понравилось!

Если вам понравилась статья, вы можете подписаться на RSS или E-mail рассылку. Для получения обновлений по электронной почте, введите ваш e-mail адрес в эту форму (Доставка от FeedBurner):