10 отличных приемов с .htaccess для WordPress

    Внимание!
    Перед изменением файла .htaccess не забудьте сделать его резервную копию.


    1 — Перенаправляем WordPress RSS поток на feedburner с использованием .htaccess
    Почему некоторые вебмастера не используют feedburner? Ведь это такой замечательный инструмент для контроля за подписками на RSS. Проблема в том, что приходится руками исправлять файлы шаблонов. Этот прием поможет сохранить Ваше время.
    И не забудьте исправить в строке 6 на Ваш код

    <IfModule mod_rewrite.c>
     RewriteEngine on
     RewriteCond %{HTTP_USER_AGENT} !FeedBurner    [NC]
     RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
     RewriteRule ^feed/?([_0-9a-z-]+)?/?$ httр://feeds2.feedburner.com/wordpress[R=302,NC,L]
    </IfModule>
    




    2 — Удалить /category/ из пути в адресе WordPress
    По умолчанию категории в WordPress отображаются так: httр://www.wordpress.com/blog/category/wordpress
    А это не очень красиво, да и адрес выглядит длинновато.
    Сейчас Вы узнаете как исправить это с помощью .htaccess

    RewriteRule ^category/(.+)$ httр://www.yourblog.com/$1 [R=301,L]

    Теперь категории будут выглядеть как:
    httр://www.wordpress.com/blog/wordpress

    3 — Использование кэша браузера
    Очень хороший путь оптимизации твоего блога это использование кэша браузера. Этот код улучшает кэширование браузером статических файлов.
    При повторном запросе к файлу, который не изменился клиент получит ответ 304, а не содержимое файла.

    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 — Перенаправление постоянных ссылок на основе Дня и имени на /%postname%/
    Сначала зайдите в админку WordPress, зайдите в Settings → Permalinks и выберите custom.
    Заполните поле с /%postname%/.
    Теперь постоянные ссылки будут выглядеть так: httр://www.yourblog.com/name-of-the-post

    Теперь нам нужно перенаправить все старые ссылки на новые постоянные.
    Внесите в .htaccess следующие строки:

    RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ httр://www.domain.com/$4
    


    6 — Запретить комментирование если отсутствует referrer
    Метод построен на том, что многие спам-боты не передают referer когда постят данные.
    Этот код проверяет поле referrerи блокирует отправку комментария если отсутствует referer при обращении к файлу 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 — Перенаправить пользователя на страницу-заглушку
    на время работ на сайте желательно перенаправлять пользователей на временную страницу-заглушку
    Замените в строке 2 maintenance.html на название вашего файла.
    И в строке 3 впишите свой IP, чтобы вас не перенаправляло на эту заглушку.

    302-редирек используется чтобы поисковые системы не проиндексировали содержимое временной страницы.

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !/maintenance.html$
    RewriteCond %{REMOTE_ADDR} !^123\.123\.123\.123
    RewriteRule $ /maintenance.html [R=302,L]
    


    8 — Защита блога от хотлинков
    Хотлик — это использование файлов размещенных на вашем сайте на страницах других сайтов с целью сэкономить свой серверный трафик.
    Для борьбы с этой напастью помогут следующие строки в .htaccess

    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 — Разрешить доступ к wp-admin только с Вашего IP
    Дополнительной защитой Вашего блога от взлома может служить ограничение списка адресов, с которых разрешено заходить в админку блога.
    Не забудьте вставить свой IP в строке 8.
    Если Вы захотите использовать дополнительные адреса для доступа добавьте строки allow from xx.xx.xxx.xx

    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 — Блокирование спамеров в WordPress через .htaccess
    Часто спам-боты ходят с одних и техже IP. Следующий прием поможет блокировать доступ с этих адресов.
    Внеси адрес спамера в строке 3.
    Можно расширить список заблокированных адресов добавив строки deny from xxx.xx.xxx.xxx.

    <Limit GET POST>
    order allow,deny
    deny from 200.49.176.139
    allow from all
    </Limit>
    


    UPD: Оригинал статьи можно найти здесь. Наткнулся случайно, но не смог проигнорировать такие полезности, вот и вышло то, что вышло — эта статья.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 29

      +11
      В принципе это и не только для WP подойдёт.
        0
        Согласен. Можно прикрутить к чему угодно. Хороший список
        +1
        а возможен .htaccess-прием с «сокрытием» админки?
        т.е. вместо /wp-admin/ расположить админку по адресу /blog-admin/, например?
          +1
          тогда еще надо запретить отдавать .htaccess или писать это напрямую в конфиги сервера
            0
            Дык оно по умолчанию запрещено обычно, если вы об этом :)
          0
          А посоветуйте что сделать в моей ситуации. Только что залил вордпресс на сервер, на котором раньше стояла хтмл заглушка и сайт был добавлен в Мои сайты в Яше. Подтверждение было через метатег. Файл соответсвенно удалил, а вот теперь понять не могу в каком же месте в вордпрессе я должен вставить метатег для подтвержения.
          Подтвердить тхт файлом не получается, почему — не знаю. Браузер выдает 404 ошибку и яндекс файл не видит тоже.
            0
            Возможно, в .htaccess есть правило, как-либо запрещающее обращение к этому файлу…
            Я почти ни разу не ставил Wordpress — могу ошибаться в причине проблемы.
              0
              Это Хабр или песочница?
              Вы не знаете, где в Вордпрессе лежат шаблоны? Открываете свой шаблон, и засовываете свой мета-тег в head.
                –1
                Спать пора наверное.
                Я файл header.php не видел… :-(
              0
              а где ссылка на оригинал?
                +2
                Поправил. Переводил в 2 захода с промежуточным вылетом системы в BSOD. Потому к конце редактирования адреса оригинала не сохранилось. Но вот нагуглил специально для Вас :)
                0
                Может быть стоило написать, что это перевод, и дать ссылку на источник?
                  0
                  Ошибки в 3 пункте.
                    0
                    спасибо за исправление.
                      0
                      На самом деле это хабр скушал тег внутри блока CODE-/CODE. Ghbikjcm bcgjkmpjdfnm PRE-/PRE
                        0
                        … Пришлось исправить на PRE-/PRE
                    0
                    Спасибо, подойдет в качестве наглядного примера всем и для всего кто до конца не разобрался.
                      –3
                      Спасибо, сейчас как раз разрабатываю сайт на WordPress — очень актуально!
                        0
                        Вопрос по пункту 5 — Перенаправление постоянных ссылок на основе Дня и имени на /%postname%/
                        Если я так сделаю… «вес» же страницы новые не получат? и со временем старые уйдут и звыдачи, заменившись новыми(без дат) но ссылки если вели на старые не передадутся новым? Или я ошибаюсь?
                          0
                          Редирект делается через 301 — Google в этом случае склеивает оба адреса, старый и новый. Так что через некоторе время все старые адреса в выдаче заменятся на новые и вес сохранится.
                          0
                          Спасибо за статейку (: Очень полезные вещи.
                            0
                            Спасибо, в мемориз.
                              0
                              Большое спасибо!
                                0
                                Еще один прием — убирает хэндлер для php-скриптов и выдает исходный код с подсветкой (актуально для кодерских блогов)
                                Options -Indexes
                                RemoveHandler .php .phtml .php3
                                AddType application/x-httpd-php-source .php .phtml .php3

                                .htaccess нужно поместить в wp-content/uploads
                                  0
                                  кстати, что бы .htaccess`ы работали не только в апаче, но и в IIS7 советую взглянуть на www.helicontech.com/ape/
                                  а в IIS6 сюда: www.helicontech.com/isapi_rewrite/
                                    0
                                    пункт 2

                                    У меня .htaccess сейчас выглядит так:
                                    <IfModule mod_rewrite.c>
                                    RewriteEngine On
                                    RewriteBase /
                                    RewriteCond %{REQUEST_FILENAME} !-f
                                    RewriteCond %{REQUEST_FILENAME} !-d
                                    RewriteRule. /index.php [L]

                                    Как мне добавить новое правило, для удаления category из URL?
                                      0
                                      закрывающая /IfModule вырезалось
                                        0
                                        Тоже интересует этот вопрос. Пробовал разные варианты вставки — не работает — 0 реакции. :)
                                        0
                                        Полезно! 1, 3 и8 совет оказались очень полезными. Как раз недавно решал проблему по первому

                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                        Самое читаемое