Проблема с использованием .htaccess для перенаправления Feedburner
Я использую постоянные ссылки в формате год/месяц/название-записи, а также плагин download-monitor для обработки загрузок файлов. Я добавил правила перезаписи в начало файла .htaccess, следуя инструкциям на perishable press.
Я делал то же самое на другом блоге, и там всё работало нормально. Единственные различия: тот блог не использовал download-monitor, и установка была в корне домена, а не в поддиректории /blog/
.
Если я закомментирую эту строку:
RewriteCond %{REQUEST_URI} ^/?feed.* [NC]
То всё работает. Мне просто интересно, почему эта строка есть в инструкциях, если она не работает? Может ли это быть связано с поддиректорией?
.htaccess:
# временное перенаправление всех WordPress-фидов на Feedburner
# из http://perishablepress.com/press/2008/03/25/redirect-wordpress-feeds-to-feedburner-via-htaccess-redux/
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /blog/
RewriteCond %{REQUEST_URI} ^/?feed.* [NC]
RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC]
RewriteRule ^feed/?.*$ http://feeds.feedburner.com/mysite [L,NC,R=302]
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /blog/
RewriteRule ^download/([^/]+)$ http://www.mysite.com/blog/wp-content/plugins/download-monitor/download.php?id=$1 [L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END WordPress

Попробуйте этот вариант. Такой формат работает у меня. Не нужно повторять IfModule, RewriteEngine, RewriteBase.
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteCond %{HTTP_USER_AGENT} !^.*(FeedBurner|FeedValidator) [NC]
RewriteRule ^feed/?.*$ http://feeds.feedburner.com/mysite [L,NC,R=302]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
RewriteRule ^download/([^/]+)$ http://www.mysite.com/blog/wp-content/plugins/download-monitor/download.php?id=$1 [L]
</IfModule>
# END WordPress
Вот хорошее руководство по htaccess: http://codeigniter.com/wiki/mod_rewrite/
Если у вас продолжаются проблемы, возможно, стоит рассмотреть использование плагина: http://wordpress.org/extend/plugins/tentbloggers-feedburner-rss-redirect-plugin/screenshots/

Значит, вы говорите, что строка:
RewriteCond %{REQUEST_URI} ^/?feed.* [NC]
не обязательна? Кажется, всё работает, когда я убираю эту строку, но не понимаю, зачем она была в инструкциях.

Этот RewriteCond всё ещё необходим, если вы видите его в моём коде - он там остаётся. Вам просто не нужно повторять ifModule, RewriteEngine и RewriteBase. Сравните код выше с тем, который вы изначально опубликовали.

Хорошо, я использовал вашу версию, но у меня не получается заставить её работать - теперь ни одна из feed-ссылок не перенаправляет на FeedBurner. Я переформулирую свой вопрос выше.

ReWriteCond../?feed - это директива, определяющая условие правила, когда текущее состояние URI соответствует /?feed. В вашем оригинальном посте вы указали проблему в первой строке rewritebase. Поэтому я оставил это без изменений. Эта строка не обязательна. Поскольку вы отметили, что изучили свой код на perishablepress, вы должны были прочитать их комментарий о том, чтобы удалить эту строку, если ваш сервер не перенаправляет должным образом.

Ох, я не перенаправлял ленту комментариев, поэтому, думаю, пропустил эту часть. Спасибо! Также единственная причина, по которой все было разделено в моем .htaccess, заключалась в том, чтобы позволить WordPress добавлять свои собственные правила и Download Monitor, а я просто скопировал код FeedBurner. Ваш вариант определенно чище.

На самом деле это не работает. Вам нужно переместить последние RewriteCond
и RewriteRule
выше строки RewriteRule ^index\.php$ - [L]
. В статье конкретно говорится, что они должны быть выше раздела с обычными постоянными ссылками WP.
