10 полезных хаков .htaccess для WordPress
Перевод: 10 awesome .htaccess hacks for WordPress
Автор: Jean-Baptiste Jung

Предупреждение
Когда редактируете файл .htaccess Вашего WordPress блога будьте уверены, что у Вас всегда есть его архивная копия, из которой можно будет восстановить исходные данные, если вдруг что-то пойдет не так.
1. Перенаправляем RSS ленту WordPress на FeedBurner с помощью .htaccess
Какой блоггер не использует FeedBurner? Уверен, FeedBurner это замечательный сервис, который позволяет Вам узнать сколько посетителей подписаны на Вашу RSS ленту. Проблема лишь в том, что Вы должны вручную отредактировать файлы Вашей темы, что-бы переправить URL ленты. К счастью есть великолепный хак с использованием .htaccess, который сохранит Вам уйму времени. Не забудьте исправить 6-ую строчку, когда будете применять этот код:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC]
RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds2.feedburner.com/catswhocode [R=302,NC,L]
</IfModule>
2. Удаляем слово «/category/» из URL Вашего WordPress
По умолчанию, постоянные ссылки на категории WordPress выглядят вот так:
http://www.catswhocode.com/blog/category/wordpress
Как Вы видите, слово category в URL не несет в себе никакого смысла. Как его убрать? Сперва сохраните Ваш файл .htaccess. Затем, откройте его и добавьте следующую строку:
RewriteRule ^category/(.+)$ http://www.yourblog.com/$1 [R=301,L]
После сохранения, URL Ваших страниц категорий будет выглядеть вот так:
http://www.catswhocode.com/blog/wordpress
3. Используем кеш браузера
Хорошим подспорьем для оптимизации времени загрузки Вашего блога будет использование кеша клиентских браузеров. Этот код напрямую не улучшит время загрузки Вашего блога, но он поможет в работе серверу, отсылая 304-ый код статуса, который будет говорить о том, что запрашиваемые статические элементы (изображения, таблицы стилей, JavaScript) не изменялись и их не нужно загружать повторно.
FileETag MTime Size
<ifmodule mod_expires.c>
<filesmatch "\.(jpg|gif|png|css|js)$">
ExpiresActive on
ExpiresDefault "access plus 1 year"
</filesmatch>
</ifmodule>
4. Сжимаем статические данные
Вы знаете, что пользователю можно отправлять сжатые данные, которые будут разархивированы в изначальные на клиенской стороне? Этот код определенно сохранит Вам и Вашим посетителям время загрузки, значительно уменьшив размеры передаваемых данных.
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4.0[678] no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html
5. Убираем из постоянных ссылок День, Месяц, Год и оставляем только название статьи
Первым делом, когда Вы заходите в администраторскую часть WordPress, Вы идете в Settings ? Permalinks и выбираете постоянные ссылки вида /%postname%/. Ваши ссылки теперь будут выглядеть вот так:
http://www.yourblog.com/name-of-the-post
Теперь нам необходимо перенаправить все обратные ссылки, использующие старую структуру формирования URL, на новую структуру «укороченных» постоянных ссылок. Сделаем это с помощью .htaccess, расположенного в корне WordPress, просто вставив туда следующий код (не забываем вставлять свой домен):
RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://www.domain.com/$4
6. Запрещаем постить комментарии пользователям без реферера
Вы устали от волны ежедневных спам комментариев? Конечно, есть Akismet, но есть и маленький .htaccess трюк предотвращающий определенный спам на Вашем блоге. Как правило спамеры используют ботов приходящих ниоткуда. Этот код проверяет реферер (ссылку на страницу, с которой комментатор оставляет свое сообщение) и запрещает комментирование, если оно осуществляется напрямую, через вызов скрипта wp-comments-post.php без использования формы отправки комментариев на Вашем блоге. Просто измените строку 4 в соответствии с Вашим доменом.
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourblog.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
7. Как сказать посетителям, что на блоге проходят технические работы?
Когда Вы обновляете свой блог или выполняете какие-то изменения в его дизайне, не очень-то грамотно давать показывать это посетителям, особенно когда при таких процедурах случаются различные проблемы связанные с ошибками и недочетами. По хорошему, Вы должны заранее заготовить страницу с предупреждением о том, что на данном ресурсе проводятся временные работы, и что он будет доступен в ближайшее время, так называемая «maintenance page», соответственно всех посетителей необходимо переправлять на эту страницу. Замените maintenance.html (строка 2) на страницу, которую Вы подготовили, что-бы перенаправлять своих посетителей и IP адрес на строке 3 — это Ваш IP адрес. Помните, что статус 302 — перенаправление, используется для того, что указать поисковым системам, что-бы они не индексировали нашу заготовку вместо настоящей домашней страницы сайта!
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
RewriteRule $ /maintenance.html [R=302,L]
8. Защищаем WordPress от хотлинков
Хотлинки — это способ использовать изображение с одного сайта на другом. Многие блогеры этим пользуются и этим самым нагружают чужие ресурсы. Этот код поможет защитить Ваш WordPress от хотлинков и тем самым снизить нагрузку на Ваш ресурс:
RewriteEngine On
#Replace ?mysite\.com/ with your blog url
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Replace /images/nohotlink.jpg with your "don't hotlink" image url
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]
9. Закрываем администраторский раздел WordPress от чужих глаз (IP адресов)
За исключением коллективных блогов, только Вы должны быть допущены к директории wp-admin — это директория администраторского раздела WordPress. Если у Вас есть постоянный IP адрес или блок IP адресов, этот код для Вас. Все, что Вам надо сделать, это ввести его в строке 8. Помните, что этих строк может быть несколько или, если Вы используете блок адресов, они могут быть записаны в соответствии с правилами IP адресации, к примеру так: 77.77.77.0/255.255.255.0
AuthUserFile /dev/null AuthGroupFile /dev/null AuthName "Example Access Control" AuthType Basic <LIMIT GET> order deny,allow deny from all allow from xx.xx.xx.xx </LIMIT>
10. Посылаем спамеров в баню (banning) с помощью .htaccess
Как Вы знаете — спамеры очень приставучие. В отношении каких-то конкретных персон, Вы можете завести черный список, с помощью которого сможете полностью блокировать доступ к своему детищу. Просто замените IP адрес на строке 3 на IP адрес спамера, если их несколько, то Вы можете воспользоваться советом предложенным в предыдущем пункте.
<Limit GET POST> order allow,deny deny from 200.49.176.139 allow from all </Limit>
Интересно, узнал новое про сжатие передаваемых данных, спасибо
А меня вечно хостинг блокируется из-за этих ЧПУ.. настраиваю там ВП выдает типа впишите следующее — потом косяки и бан…
Непонятно, за что бан? :(
Если выкидывает ошибку 500, значит либо mod_rewrite не поддерживается, либо ошибки в его конфигурировании
У меня ссылка на категории вида: http://domen.ru/category/soft
Строка: RewriteRule ^category/(.+)$ http://domen.ru/$1 [R=301,L]
не работает.
Да, проверил, не работает, колдовство типа ‘./’ в настройках Параметров — Постоянных ссылок то-же не помогает. Попытаюсь разобраться и дать ответ.
Разобрался, на данный момент этот трюк действительно не работает, вылетает с ошибкой 404.
Но решение есть, вот этот замечательный плагин:
http://wordpress.org/extend/plugins/wp-no-category-base/
Здравствуйте у меня вопрос: мой блог установлен в подпапке то есть он стоит не в основном каталоге и его не индексирует яндекс.
Из яндекса пришло письмо:
В поисковой системе Яндекс сайты индексируются и участвуют в поиске только по
адресу главного зеркала. Главным зеркалом Вашего сайта на данный момент
является домен http://www.sait.biz. Но все страницы раздела http://www.sait.biz/blog/
отдают нашему роботу 302 перенаправление на неглавное зеркало -
sait.biz/blog/, и, соответственно, не могут быть проиндексированы. Для того,
чтобы раздел начал индексироваться по адресу текущего главного зеркала Вам
нужно снять перенаправление.
в моём .htaccess прописано
# BEGIN
RewriteEngine On
RewriteBase /blog/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
# END
подскажите что нада изменить чтобы выполнить требования яндекса и чтобы при этом блог продолжил выполнять свои функции и все в порядке осталось с индексацией гугла, которая работает
Если честно, то не могу понять в чем проблема, формально все у Вас правильно. Сорри за поздний ответ, отпуск на дворе :)