Файл htaccess изменяет настройки сервера которые влияют. Файл htaccess: применение, включение, настройка


Сегодня я хочу рассказать о htaccess , файле, который позволяет настраивать веб-сервер Apache. Директивы, которые прописываются в этом файле напрямую влияют на выдачу, которую формирует веб-сервер. Инструмент этот достаточно мощный, использовать его нужно с умом. Статья эта написана больше полугода назад, теперь я снова к ней возвращаюсь, чтобы сделать самым подробным мануалом на эту тему.

Сразу напомню, прежде чем что либо менять в htaccess — сделайте копию вашего рабочего файла в укромное место. Мало ли, резервное копирование вообще хорошая вещь, не забывайте об этом. Я разделю статью на несколько подразделов — перенаправление страниц, запрет доступа к определенным файлам, ускорение сайта и прочие штуки, которые так или иначе могут пригодиться в работе ресурса.

Для начала — пару слов, что такое htaccess? Процитирую официальный сайт веб-сервера Apache:

Htaccess файлы (или «распределенные конфигурационные файлы») позволяют задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т. д, без изменения главного конфигурационного файла.

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

Директивы htaccess. Перенаправление

Блокируем хотлинки с других сайтов

Есть нехорошие товарищи, которые могут использовать картинки с вашего ресурса для использования в своих проектах. Они используют ваши изображения на своих сайтах, другими словами, используют вашу пропускную способность в своих целях, по аналогии с . Будем с ними бороться… Заменим любую картинку, на которую ведет хотлинк с другого сайта, на какое-нибудь предупреждающее изображение или на что хватит фантазии. В коде не забывайте менять адреса на ваши URL.

RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+\.)?ваш-урл\.com/ RewriteCond %{HTTP_REFERER} !^$ #Замените путь к картинке RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/noHL.jpg [L]

Перенаправим RSS фиды WordPress на Feedburner

Я не думаю, что кто-то пользуется чем-то другим, отличным от Feedburner. Удобно для пользователя, удобно для владельца блога, статистика, опять же. Если вы еще не используете — крайне рекомендую. Код ниже перенаправит все ваши RSS потоки на ваш аккаунт, не забывайте только вставить нужный адрес.

RedirectMatch 301 /feed/(atom|rdf|rss|rss2)/?$ RedirectMatch 301 /comments/feed/(atom|rdf|rss|rss2)/?$ http://feedburner.com/yourfeed/

В этом примере идет перенаправление двух потоков: основного RSS и обновление комментариев, если посетитель подписан на обновления.

Изменим страницы ошибок

С хостингом и сайтом случается всякое, поэтому заранее нужно быть готовым к проблемам и сделать свои страницы ошибок. А пользователи в случае проблем будут перенаправлены на соответствующую страницу. На этих страницах можно дать краткую информацию для пользователя, почему такое случилось. Контакты свои оставить, в крайнем случае.

ErrorDocument 400 /errors/badrequest.html ErrorDocument 401 /errors/authreqd.html ErrorDocument 403 /errors/forbid.html ErrorDocument 404 /errors/404.html ErrorDocument 500 /errors/serverr.html #Замените /errors/*.html на путь к вашим страницам ошибок

В этом примере идет перенаправление в случае основных ошибок. 404 я тоже добавил, хотя CMS обычно отрабатывают такие моменты, но бывали случаи.

301 и 302 редирект или перенаправление

301 редирект или, так называемое постоянное перенаправление — говорит о том, что страница поменяла адрес или URL и перенаправляет на новую страницу. Если у вас на сайте была проиндексированная ПС страница, а вы поменяли ее адрес — в обязательном порядке сделайте 301 редирект на новую страницу. При 301 редиректе старая страница не индексируется, а вместо нее «подставляется» новая.

RewriteEngine on Redirect 301 /old-page http://ваш-урл.ру/new-page

Собственно, похожий пример внимательный читатель увидит выше, в случае перенаправления RSS. Да, технология та же.
Бывает так, что сайт переезжает на новый домен, нужно сохранить структуру ссылок, а их могут быть сотни и тысячи, на каждую установить перенаправление нереально. Код ниже поможет разобраться с такой ситуацией:

Options +FollowSymLinks RewriteEngine on RewriteRule (.*)

Есть интересная методика «скрытия» внешних ссылок путем 301 редиректа. Допустим, у вас есть «сквозная» ссылка в сайдбаре, которая ведет на ваш профиль в Google+, она внешняя, то есть ведет на внешний ресурс. Для SEO очень хорошо, когда таких ссылок как можно меньше. Можно спрятать их и сделать внутренними.

Технология производства внутренних ссылок из внешних:

  • ставим ссылку на мнимую страницу, допустим сайт/google-plus
  • настраиваем 301 редирект в htaccess с этой страницы на реальную страницу вашего профиля
  • посетитель ничего не чувствует, ПС довольны

Подобным образом можно ставить любые другие условно постоянные ссылки.
302 редирект или временное перенаправление говорит ПС, что страница перемещена временно, поэтому индексировать нужно обе страницы, старую и новую.

RewriteEngine on Redirect 302 /old-page http://ваш-урл.ру/new-page

Код абсолютно такой же, как в случае с постоянным перенаправлением.
302 редирект удобно использовать, когда проводятся какие-либо долгосрочные работы на сайте и не нужно показывать посетителям «поломанные» страницы. В таком случае вам поможет этот код:

RewriteEngine on RewriteCond %{REQUEST_URI} !/inside.html$ RewriteCond %{REMOTE_ADDR} !^123.123.123.123 RewriteRule $ /inside.html

Склеиваем сайты с www и без него

Очень плохо, когда сайт доступен по двум адресам, ПС это очень не любят. Склеить это в один адрес поможет код ниже:

Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.ваш-урл\.com$ RewriteRule ^(.*)$ http://ваш-урл.com/$1

В этом примере — главное зеркало это адрес без www. Если необходимо сделать наоборот — поменяйте www местами, сверху уберите, внизу добавьте.

Показ страниц в зависимости от IP SetEnvIf REMOTE_ADDR 192.168.0.1 REDIR="redir" RewriteCond %{REDIR} redir RewriteRule ^/$ /about.html

Добавлять адреса можно дублированием первой строки, в последней — меняется страница для перенаправления.

Перенаправляем на главную

Перенаправление со страниц site.com/index.php и site.com/index.html на страницу site.com/. За код спасибо Василию Красноженову .

RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.html\ HTTP/ RewriteRule ^index\.html$ http://site.com RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/ RewriteRule ^index\.php$ http://site.com

Директивы htaccess. Разделяем доступы

Запрет доступа к сайту

Бывает такое, что необходимо запретить доступ посетителям с определенного IP, спамерам или еще кому нехорошему.

Order Allow,Deny Allow from all Deny from 192.168.0.1

Добавлять IP в список можно просто добавляя последнюю строку и меняя там адрес на нужный.
Противоположная ситуация, когда всем нужно запретить, кроме некоторых IP, тогда используем такой код:

Order Deny,Allow Deny from all Allow from 192.168.0.1

Добавлять адреса аналогично предыдущему примеру.

Запрещаем просмотр нежелательным User-Agent

Каждый браузер или приложение, которое запрашивает страницу, так или иначе имеет идентификатор — User-Agent. Можно запретить просмотр нежелательным товарищам. Это могут быть как программы, сканирующие сайты, так и старые браузеры, от поддержки которых вы целиком отказались. Ситуации бывают разные.

SetEnvIfNoCase user-Agent ^FrontPage SetEnvIfNoCase user-Agent ^Java.* SetEnvIfNoCase user-Agent ^Microsoft.URL SetEnvIfNoCase user-Agent ^MSFrontPage Order Allow,Deny Allow from all Deny from env=bad_bot

Полный список известных User-Agent вы можете найти на сайте http://www.user-agents.org/

Запрещаем доступ к определенному файлу

В примере стоит запрет на доступ к файлам wp-config и htaccess , тем самым повышается уровень общей защиты. Очень нужная директива, рекомендую добавить в свои файлы

# защищаем wpconfig.php order allow,deny deny from all #защищаем htaccess order allow,deny deny from all

Аналогично можно защитить css и js файлы, которые используются плагинами:

Order allow,deny allow from all

Скачивание определенных типов файлов

Современные браузеры такие умные, что иногда становится страшно. Мой Хром иногда пытается внутри себя открывать для просмотра PDF файлы, иногда вешаясь насмерть. С помощью htaccess можно принудительно сказать браузеру, что делать с тем или иным типом файлов, не оставляя этот момент на его усмотрение. В данном случае это скачивание. Дополнительные типы файлов можно добавить по аналогии.

AddType application/octet-stream .pdf AddType application/octet-stream .zip AddType application/octet-stream .avi

Ограничение на доступ к админке WordPress

Если у вас постоянный IP адрес, можно только ему давать доступ к админ-панели WordPress

AuthUserFile /dev/null AuthGroupFile /dev/null AuthName "Example Access Control" AuthType Basic order allow, deny deny from all allow from Ваш IP

Директивы htaccess. Техническая оптимизация и ускорение

Запрещаем автоматическое индексирование файлов

В каждой папке на сайте Apache создает, по умолчанию, индексные файлы, в которых перечисляется, какие файлы в папке находятся. Если вы не хотите давать дополнительную лазейку для злоумышленников — запретите индексирование.

Options -Indexes

Включаем gzip сжатие

Вы знаете о том, что данные на сервере можно сжать, а клиент их распакует у себя? Код ниже как раз включает такую штуку. Нужно только убедиться, что gzip разрешен на вашем хостинге, но обычно он есть.

ForceType text/javascript Header set Content-Encoding: gzip ForceType text/css Header set Content-Encoding: gzip ForceType text/javascript RewriteEngine On RewriteCond %{HTTP_USER_AGENT} !".*Safari.*" RewriteCond %{HTTP:Accept-Encoding} gzip RewriteCond %{REQUEST_FILENAME}.gz -f RewriteRule (.*)\.js$ $1\.js.gz [L] ForceType text/javascript ForceType text/css RewriteEngine On RewriteCond %{HTTP_USER_AGENT} !".*Safari.*" RewriteCond %{HTTP:Accept-Encoding} gzip RewriteCond %{REQUEST_FILENAME}.gz -f RewriteRule (.*)\.css$ $1\.css.gz [L] ForceType text/css

Код не работает для изображений, но к ним применять gzip не рекомендуется. Именно такой код установлен у меня.

Сжатие с применением mod_deflate

Ходят слухи, что с помощью этого мода сжимать данные лучше и сайт работает быстрее. Я не могу протестировать, да и не встречал в Интернете подобных тестов. Если у кого есть такая информация — буду благодарен. А код выложу, мало ли

SetOutputFilter DEFLATE

Включаем кэширование браузера клиента

Интересная директива, которая позволяет использовать кэширование браузера. Указанные типы файлов записываются в кэш браузера и при повторном вызове будут грузиться оттуда, что существенно ускоряет общую скорость загрузки сайта и дает меньшую нагрузку на ваш хостинг.

Header append Cache-Control "private" FileETag MTime Size ExpiresActive On ExpiresDefault "access plus 0 minutes" ExpiresByType image/ico "access plus 1 years" ExpiresByType text/css "access plus 1 years" ExpiresByType text/javascript "access plus 1 years" ExpiresByType image/gif "access plus 1 years" ExpiresByType image/jpg "access plus 1 years" ExpiresByType image/jpeg "access plus 1 years" ExpiresByType image/bmp "access plus 1 years" ExpiresByType image/png "access plus 1 years"

Указываем кодировку по умолчанию

WordPress работает с кодировкой UTF8 и делает это хорошо, но чтобы гарантированно избежать проблем с кодировкой — укажите ее принудительно, хуже не будет точно.

AddDefaultCharset UTF-8

Ограничиваем число подключений к сайту

Современные браузеры умеют создавать несколько одновременных подключений к серверу, отдающему сайт. Если же у вас маловато ресурсов, можно ограничить число подключений.

MaxClients

При размещении в корневом каталоге, директива работает на весь сайт, если же положить ее в папку с файлами, которые вы отдаете на скачивание — можно ограничить скачивание в несколько потоков.

Разрешаем выполнение php внутри JavaScript

Иногда необходимо выполнить некоторый код внутри скрипта. Этот код поможет включить эту функцию

AddType application/x-httpd-php .js AddHandler x-httpd-php5 .js SetHandler application/x-httpd-php

Вот и все, что касается htaccess и его стандартного использования. Я не стал упоминать о защите папок паролями, потому что не считаю это правильным, о «защите» от спама, путем блокировки запросов запросов без передачи Referer, потому что все современные спам-машины давно умеют это делать. Ну и прочие вещи, которые не считаю грамотно реализованными.

Напоследок хочу представить вам сервис тестирования вашего htaccess файла — http://htaccess.madewithlove.be/ . Там все просто, удачного дня


Комментариев: 112

  • Константин

    Вот все хорошо, только у меня сайт перенаправляет на страницу 404 а сервер при этом отдает код 200.
    Можете подсказать как исправить?

  • Mark

    Спасибо за подробную статью!

  • Роман

    Подскажите, удалил раздел, +300 страниц, как сделать переадресацию со всех страниц раздела сайта на главную. Какой код, условие добавить кроме этого? RewriteRule ^raznoe(.*)$ /

  • Serge Holmberg

    Спасибо за статью. Очень полезная статья. Хотелось бы еще узнать дополнительно. А как сделать так, чтобы доступ в каталогах сайта возможен был тлько через index.html и не возможем напрямую? Поясняю. У меня в каталоге много взаимосвязанных страниц. Однако каждую по отдельности я могу запросить из браузера. Т.е. например есть странца page_1.html в каталоге main. Вход в нее идет от index.html (там есть кнопка). Однако загрузить страницу page_1.html я могу и отдельно обратившись http://www.mysite.com/main/page_1.html . Как это предотвратить, как сделать так, чтобы для посетителей сайта был доступен только index.html, а через него доступ и к другим страницам. То есть обмен между страничками был возможен только внутренне на сервере. Тогда посетители не смогут произвольно открывать любые страничеи на сайте. Заранее благодарен. Спасибо.

  • Виктор

    Здравствуйте! Спасибо за статью! Сейчас как раз настраиваю свой первый) сайт. Очень внимательно прочитал, ещё раз спасибо! Есть вопрос: по поводу защиты определённых типов файлов.
    Вы писали:
    «Аналогично можно защитить css и js файлы, которые используются плагинами:
    #
    #order allow,deny
    #allow from all
    #
    -конец цитаты
    В предпоследней строчке кода нет опечатки? Если мы хотим защитить эти файлы, может быть, там должно быть DENY? Или я чего-то не понимаю?

  • plumclub

    Большое спасибо за статью, давно не встречал настолько внятного и понятного объяснения. Респект

  • Donnellligh

    Поздно пить Боржоми, когда почки в унитазе!

  • Андрей

    Хорошая статья! Спасибо!

    Есть вопрос.

    У меня есть старый сайт еще на.ASP, я решил его переделать, сменить тип Web-сервера, установить туда WordPress и соответственно пришлось убрать все старые страницы сайта т.к. под аппачем ASP не работает. Я не хочу, чтобы они вообще стали недоступными и сделал поддомен (http://www.old.mysite.ru) и перенес все старое туда и там все работает.

    Теперь надо сделать так, чтобы, если пользователь обращается к любой ASP-странице, его автоматически перенаправляло на поддомен http://www.old.mysite.ru т.е. перенаправление делать ТОЛЬКО для ASP страниц, остальные не перенаправлять.

    причем «www» — может быть или не быть в адресе

      Я не уверен, что вам необходимо клеить. Укажите на одной из страниц запрет индексации и все

  • zeleniyalex

    Здравствуйте.
    Спасибо за статью, отличный материал, добавил в закладки.
    У меня вопрос. Перешел на указанный Вами сервис проверки htaccess файла.

    Ввёл свой:
    # BEGIN WordPress

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ — [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    Получил вот такой результат:
    # BEGIN WordPress
    1
    2 RewriteEngine On
    3 RewriteBase /
    4 RewriteRule ^index\.php$ — [L]
    5 RewriteCond %{REQUEST_FILENAME} !-f ——————— This variable is not supported: %{REQUEST_FILENAME}
    6 RewriteCond %{REQUEST_FILENAME} !-d ——————— This variable is not supported: %{REQUEST_FILENAME}
    7 RewriteRule . /index.php [L], ——————— This rule was not met because one of the conditions was not met
    8
    9 # END WordPress

    Что значат комментарии к пунктам 5,6,7 ?
    Спасибо.

  • Anti Out

    Виктор, подскажите, пожалуйста, чтобы сделать склейку, нужно вписать url своего сайта, суть в чем, я не пойму.com в самой директиве меняется или остается?
    Какой вариант правильный (на примере Вашего сайта)?

    Options +FollowSymLinks
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^www.gering111\.com$
    RewriteRule ^(.*)$

      Второй вариант верный, сайт для примера. В вашем случае может быть site.ru или site.org

  • Олег

    Мегаполезная статья!!!
    Но, кеширование файлов у клиента — не Cache-Control «public», а Cache-Control «private».
    Public — на прокси-сервере

      Точно! Спасибо вам за внимательность

  • Александр

    Здравствуйте!
    Был сайт вида site.ru/club/ Нужно сделать редирект всех страниц этого сайта на одну страницу нового примерно вот такой структуры: new-site.ru/step/stranica.html.
    Подскажите пожалуйста как это правильно сделать через htaccess?

  • Михаил

    Доброго времени суток. Хотел предупредить, что использование этого кода
    RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.html\ HTTP/
    RewriteRule ^index\.html$ http://site.com
    RewriteCond %{THE_REQUEST} ^{3,9}\ /index\.php\ HTTP/
    RewriteRule ^index\.php$ http://site.com
    может закрыть доступ в админ панель сайта, у меня так было с CMS ShopScript, и VamShop

      Я использую этот код с WP, ImageCMS — все ок, никаких проблем. Собственно, на других системах не тестировал, ничего не скажу.

  • Влад

    Спасибо! наконец-то у меня с gzip’ом всё получилось!!!

  • Роман
  • Михаил

    Вопрос по редиректу.
    Необходимо перенаправлять на одну страницу, если заходим с браузера, но на другую, если с мобильного приложения (не моб. браузера). При этом в обоих вариантах персоначальная ссылка на корень сайта.

      Василий , не встречал такого, если честно…

  • praktik_man

    Всюду лишь общие описания HTACCESS ,а настоящих примеров мало, также неплохо было бы и синтаксис описать, что с чем используется.

  • praktik_man

    Может поможетете, если кто-то знает ответ?
    Есть каталог

    http://сайт.ru/catalog.php/(куча разных старниц)
    и чтобы перекидывало с любового введенного адреса, который начинается с catalog.php на:

    http://сайт.ru/products/10
    и ничего больше не дописывало. тоесть чтобы просто редиректило на директорию.

    Пробовал через RedirectMatch ^catalog\.php(.+) http://сайт.ru/products/10
    Так не работает ((

  • Пока помочь не могу, далеко от компьютера. На первый взгляд — все ок. Скорее всего, в синтаксисе проблема, но надо проверить

  • praktik_man

    тоесть поменялась и папка и расширение страницы, а название товара осталось прежним.

    Делал редирект в виде:
    RewriteRule ^content/(.+)$ http://сайт.ru/новая папка/$1.html
    И не работает;(
    В чем проблема?

  • Сейчас для организации работы подавляющего большинства сайтов в сети используется веб-сервер Apache. Он немного отстает в производительности, но зато очень прост в настройке и имеет огромное количество возможностей.

    Веб-сервер Apache можно настраивать не только в главном конфигурационном файле, но и через файлы.htaccess. Эти файлы размещаются в определенных папках и указывают веб-серверу как нужно себя вести в этой папке и ее подкаталогах.

    Настройка файла htaccess очень похожа на настройку главного файла конфигурации Apache. Но она немного отличается. С помощью этого файла вы можете настроить редиректы, внутреннее изменение url, права доступа, авторизацию по паролю и многое другое. В сегодняшней статье мы рассмотрим как правильно настроить htaccess для вашего сервера.

    Мы уже начали тему в одной из предыдущих статей, но сегодня немного освежим информацию и рассмотрим более детально именно настройку htaccess.

    Все директивы из файла htaccess выполняются точно так же, как если бы они были размещены в глобальном конфигурационном файле, только внутри директивы . Это не позволяет менять глобальные настройки, но вы можете очень тонко настроить поведение программы в папках, к которым у вас есть права доступа.

    Общий синтаксис директив очень прост, это пары команд и их опций, разделенных пробелом, например:

    Команда параметр1 параметр2 флаги

    Самих команд достаточно много и мы будем рассматривать их на примерах действий, которые они выполняют. Кроме самих команд, тут могут использоваться вложенные структуры, например, для активации модулей или проверки доступности того или иного модуля. А теперь давайте перейдем ближе к тому как выполняется правильная настройка htaccess. Начнем с самых простых действий.

    Настройка доступа htaccess

    Довольно часто htaccess используется для управления доступом к папке. Для управления доступом используются три команды:

    • order - порядок;
    • deny - запретить;
    • allow - разрешить.

    Сначала, с помощью опции order, нужно указать в каком порядке будут выполняться директивы, значение имеет только эта команда, и неважно в какой последовательности они расположены в файле.

    Затем с помощью директивы allow или deny мы разрешаем или запрещаем доступ к папке с определенных адресов. Например, чтобы запретить все необходимо добавить в htaccess:

    Order deny,allow
    Deny from all

    Но мы также можем разрешить доступ только с локальной сети:

    Order deny,allow
    Deny from all
    Allow 192.168.0.

    Если указано deny,allow, то проверка будет выполняться в таком порядке. Сначала все директивы deny, затем все директивы allow, и если ни одно из условий не подошло, то запрос пропускается.При allow,deny такой запрос будет по умолчанию отклонен. Например, предыдущий пример можно написать так:

    Order allow,deny
    Allow 192.168.0.

    Модификация URL в htaccess

    Наиболее часто htaccess используется для модификации URL во время выполнения или редиректов. За эту функциональность отвечает модуль mod_rewrite и обычно он активирован в большинстве конфигураций Apache.

    Модификация URL в htacces выполняется с помощью трех директив, это RewriteBase , которая указывает префикс адреса, RewriteCond проверяет соответствие, и RewriteRule - изменяет URL в соответствии с регулярным выражением если все правила соответствия подходят.

    Сначала нужно включить Mod_Rewrite, на случай если модуль еще не активен:

    RewriteEngine on

    Укажем, что в качестве префикса для URL нужно использовать корень:

    И будем автоматически заменять URL адреса с index.html на index.php, обратите внимание, что исходный URL - это путь к запрашиваемому файлу относительно расположения файла htaccess:

    RewriteRule index.html /index.php

    Для более эффективной замены можно использовать регулярные выражения они состоят из специальных символов и переменных и обычных символов и цифр. Рассмотрим основные специальные символы:

    • ^ - начало строки;
    • $ - конец строки;
    • . - любой символ;
    • * - любое количество любых символов;
    • ? - один определенный символ;
    • - последовательность символов, например, от 0 до 9;
    • | - символ или, выбирается или одна группа, или другая;
    • () - иcпользуется для выбора групп символов.

    В регулярных выражениях htaccess также можно использовать переменные с данными, полученными из заголовков запроса, например:

    • %{HTTP_USER_AGENT} - поле User-Agent, которое передает браузер пользователя;
    • %{REMOTE_ADDR} - IP адрес пользователя;
    • %{REQUEST_URI} - запрашиваемый URI;
    • %{QUERY_STRING} - параметры запроса после знака?.

    Это наиболее часто используемые переменные, но их есть намного больше, остальные вы можете найти в официальной документации . Регулярные выражения открывают более широкие возможности, например, вы можете заменять во всех страницах html на php:

    RewriteEngine On;
    RewriteBase /;

    Директива RewriteCond дает еще больше гибкости, вы можете выбрать к каким адресам стоит применять модификацию, например, будем переопределять данные только для версии с www:

    RewriteBase /;
    RewriteCond % {HTTP_HOST} ^www.site.ru$
    RewriteRule ^(.*)\.html$ $1.php

    Таким образом, вы можете выполнять любые преобразования ваших URL без фактических редиректов куда-либо. Но дальше мы рассмотрим как делать редиректы.

    Настройка редиректов в htaccess

    Настройка редиректов htaccess выполняется похожим образом, с помощью того же самого модуля mod_rewrite, только теперь вместо модификации url мы указываем флаг с нужным действием и кодом редиректа.

    Самый простой редирект можно выполнить без mod_rewrite, с помощью такой строки:

    Redirect 301 /index.html http://www.site.ru/index.php

    Но обычно нужны перенаправления с более широким действием. Все выглядит очень похоже, только теперь мы используем флаг чтобы не учитывать регистр, [L] для прекращения обработки и [R] - для редиректа. Например, перенаправление htaccess с версии без www на домен с www:

    RewriteCond %{HTTP_HOST} ^site\.ru$
    RewriteRule ^(.*)$ http://www.site.ru/$1

    Значение R=301 означает код редиректа, который будет возвращен клиенту, можно использовать 301, 302 и т д. Редирект htaccess с домена www на домен без префикса будет выглядеть так:

    RewriteCond %{HTTP_HOST} ^www.site\.ru$
    RewriteRule ^(.*)$ http://site.ru/$1

    Таким же образом можно сделать переадресацию:

    RewriteRule ^старый_адрес /новый_адрес/$1

    Редирект с http версии на https:

    RewriteCond %{SERVER_PORT} ^80$
    RewriteCond %{HTTP} =on
    RewriteRule ^(.*)$ https://site.ru/$1

    Настройка страниц ошибок в htaccess

    При возникновении каких-либо ошибок во время генерации страницы, веб-сервер выдает краткое сообщение и код ошибки. Но пользователям будет намного понятнее в чем дело, если вы сделаете для каждой ошибки отдельную страницу с картинками и полноценным объяснением.

    Настройка htaccess для этого пункта будет очень полезной. Вы можете использовать директиву ErrorDocument. С помощью нее можно задать html страницы для ошибок 4хх и 5хх. Например, для 404:

    ErrorDocument 404 http://site.ru/error/404.shtml
    ErrorDocument 403 http://site.ru/error/403.shtml
    ErrorDocument 401 http://site.ru/error/401.shtml
    ErrorDocument 500 http://site.ru/error/500.shtml

    Кэширование в htaccess

    Браузер позволяет хранить в своем кэше изображения, файлы скриптов, стилей и другие медиафайлы определенное время. Время жизни кэша задается веб-сервером с помощью специальных заголовков. Их можно настроить с помощью модуля expires.

    Сначала активируем модуль и устанавливаем период кэширования по умолчанию:

    ExpiresActive On
    ExpiresDefault "access plus 1 month"

    Теперь мы можем настроить кэширование для каждого mime типа файлов:

    ExpiresByType text/html "access plus 1 month 15 days 2 hours"
    ExpiresByType image/gif "access plus 5 hours 3 minutes"
    ExpiresByType image/x-icon "access plus 2592000 seconds"

    В первой строке мы указываем, что страницы html нужно считать годными на один месяц 15 дней и два часа с момента загрузки. Доступны такие типы файлов:

    • image/x-icon;
    • image/jpeg;
    • image/png;
    • image/gif;
    • application/x-shockwave-flash;
    • text/css;
    • text/javascript;
    • application/javascript;
    • application/x-javascript;
    • text/html;
    • application/xhtml+xml;

    Чтобы быть уверенным что эта конструкция не вызовет ошибок заключите ее в if:


    Сжатие файлов в htaccess

    Для сжатия в Apache можно использовать модуль deflate. Здесь достаточно просто перечислить mime типы файлов, которые нужно сжать. Например:

    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript

    Вы также можете заключить конструкцию if, чтобы проверить поддерживается ли этот модуль:


    Выводы

    В этой статье мы рассмотрели как выполняется настройка файла htaccess для правильной работы вашего сайта. Все действия выполняются не так уже и сложно. Достаточно скопировать несколько строк и исправить их под свои нужды. Если у вас остались вопросы, спрашивайте в комментариях!

    На завершение предлагаю видео с обзором конфигурационного файла Apache:

    Web — сервер Apache — это мощный и многофункциональный программный продукт с разнообразными возможностями. В данной статье будут расмотрены приёмы конфигурирования Apache, наиболее часто встречающиеся при разработке Web — сайтов.

    Как известно, все настройки сервера Apache находятся в файлe httpd.conf, доступ к которому имеется не всегда. Например, если используется виртуальный сервер на хостинге, когда один сервер Apache обслуживает сотни сайтов, то, естественно, нельзя позволить владельцу одного сайта менять конфигурацию сервера, которая отразится на всех остальных сайтах. Тем не менее Web — сервер Apache допускает конфигурирование на уровне отдельных каталогов при помощи файлов.htaccess. Именно на работу с этими файлами, как единственными конфигурационными файлами, которые доступны большинству Web — разработчиков, и будет сделан основной упор в этой статье.

    Файл.htaccess (с точкой в начале имени) – это конфигурационный файл, который даёт возможность настраивать работу сервера на уровне отдельных каталогов: устанавливать права доступа к файлам в каталогах, менять названия индексных файлов, самостоятельно обрабатывать коды ответов протокола HTTP, модифицировать адреса запрошенных страниц.

    Примечание
    Файл.htaccess может быть размещен в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами файлов.htaccess во вложенных каталогах).

    Изменения, вносимые в файлы.htaccess, вступают в силу немедленно и не требуют перезагрузки сервера в отличие от изменений, вносимых в главный конфигурационный файл httpd.conf.

    Для того, чтобы файлы.htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла httpd.conf, где должны быть прописаны директивы, которые разрешат файлу.htaccess переопределять конфигурацию Web-сервера в каталоге. Список этих директив задаётся директивой AllowOverride.

    Директива AllowOverride может включать в себя одну из следующих директив или их комбинацию: AuthConfig, FileInfo, Indexes, Limit, Options, All, None

    Для того чтобы дать директивам файлов.htaccess максимальные права на изменения директив, значение директивы AllowOverride в файле httpd.conf должно быть равно All. Оно является значением по умолчанию.

    AllowOverride All

    Запретить переопределение любых директив в конфигурационных файлах.htaccess можно при помощи значения None:

    AllowOverride None

    Замечание
    Название конфигурационного файла можно изменить, и например, назвать его не.htaccess, a access.conf. За название этого файла отвечает директива AccessFileName в файле httpd.conf. Изменение названия конфигурационного файла.htaccess не рекомендуется, т.к. это может усложнить дальнейшую поддержку сервера.

    Синтаксис.htaccess

    Перед тем, как будут рассмотрены примеры, остановимся на синтаксисе директив в файлах.htaccess.

    • Пути к файлам и каталогам должны указываться от корня сервера, например, /pub/articles/masters/php/
    • При указании абсолютных url обязательно должны быть зааданы протоколы, например: Redirect / http://www.site.ru
    • В файлах.htaccess недопустимы пробелы в указаниях путей к файлам и в названиях самих файлов, т.к. это приводит к генерации кода ответа 500 — ошибка конфигурации сервера: «Internal Server Error».
    Примеры использования.htaccess Индексные страницы:

    Могут возникнуть ситуации, когда необходимо изменить состав индексных файлов, например, если нужна индексная страница index.php, а в основном конфигурационном файле httpd.conf она не прописана. Эту задачу можно решить при помощи файла.htaccess, в котором необходимо создать директиву DirectoryIndex, где будут перечислены имена индексных страниц:

    DirectoryIndex index.php index.shtml index.html

    При запросе каталога без указания имени файла сначала будет осуществлён поиск страницы с именем index.php. Если страницы с таким именем нет в каталоге, то аналогичные операции будут произведены с файлом index.shtml и т.д. до конца списка, пока не будет найдена и открыта соответствующая страница.

    Запрет на отображение содержимого каталога при отсутствии индексного файла

    Часто требуется запретить отображение списка файлов в каталоге, если не указан или отсутствует индексный файл. Например, запретить отображение содержимого каталога с изображениями. Если такой запрет не поставить, то пользователь, обратившийся напрямую к такому каталогу, получит список всех изображений.

    Options –Indexes

    Обработка кодов ответов Web-сервера Apache

    Ни один сайт не затрахован от возникновения ошибок. Самой частой ошибкой является переход по ссылке на несуществующую страницу. В этом случае Apache генерирует код ответа 404 и отображает автоматически сгенерированную страницу с сообщением об ошибке. Наличие несуществующих страниц производит плохое впечатление на посетителей сайта. Это впечатление можно сгладить, если вместо стандартных страниц, подставлять собственные страницы с сообщением об ошибке. За назначение страниц — обработчиков кодов ответа протокола HTTP несёт ответственность директива ErrorDocument

    ErrorDocument 401 /401.html
    ErrorDocument 403 /403.html
    ErrorDocument 404 /404.html
    ErrorDocument 500 /500.html

    После директивы ErrorDocument следует указать код ответа и страницу, на которую необходимо перенаправить посетителя при возникновении данного кода ответа.

    • 401 ошибка - Запрос требует аутентификации пользователя (Unautorized).
    • 403 ошибка - Доступ к запрашиваемому ресурсу запрещён (Forbidden).
    • 404 ошибка - Запрашиваемый документ на сервере отсутствует (Not Found).
    • 500 ошибка - Ошибка конфигурации сервера или внешней программы (Internal Server Error).
    Выполнять код PHP в файлах HTML

    Обычно PHP-код выполняется в файлах с расширениями php. Иногда возникают ситуации, когда необходимо выполнять PHP-код в файлах с другим расширением. В этом случае можно дать указание Web-серверу выполнять PHP-код не только в файлах с расширением php, но и в файлах с расширением html.

    RemoveHandler .html .htm
    AddType application/x-httpd-php .php .htm .html .phtml

    Первая строка удаляет обработчик файлов с расширениями html и htm, а вторая строка сообщает серверу о необходимости использовать для файлов с расширениями htm и html обработчик PHP

    Задание кодировки файлов на сервере

    Указанная кодировка отправляется браузеру в заголовке Content-Type и позволит браузеру клиента автоматически переключиться на требуемую кодировку.

    AddDefaultCharset Windows-1251

    Задание кодировки загружаемых файлов

    При загрузке файлов на сервер можно указать, в какой кодировке сервер должен ожидать файл.

    CharsetSourceEnc windows-1251

    Отключение директивы MultiViews

    Включённая на хостинге опция MultiViews может вызвать неожиданные проблемы, например, отображение несуществующих страниц сайта. Допустим, на сайте существует страница с адресом http://www.sait.ru/down.php , и если посетители обратятся к несуществующему каталогу http://www.sait.ru/down/ , то включённая опция MultiViews вместо этого каталога подставит файл down.php. Однако подстановка будет выполнена не полностью — пути к изображениям, таблицам стилей и т.п. будут подставлены неверно. То есть страница будет отображена с искажениями. Для подавления такого поведения Apache опцию MultiViews следует отключить.

    Options -MultiViews

    Запрет доступа к файлам

    Для того чтобы посетители не могли получить доступ к служебным файлам из окна браузера, можно запретить доступ к таким файлам. Для этого используется директива запрета Deny и разрешения доступа Allow.

    Примечание
    Использование директив Deny и Allow управляет только доступом к файлам из браузера, либо из другой программы-клиента. Подобные запреты не распространяются на скрипты сервера.

    Запрет доступа к файлам из браузера

    Deny from all

    При использовании такой директивы будет запрещён доступ из браузера ко всем файлам и каталогам текущего каталога.

    Запрет доступа к определенному файлу

    Deny from all

    Здесь запрещен доступ только к файлам с именем config.php.

    Запрет доступа к файлам расширения inc

    Deny from all

    * — любая последовательность символов, исключая символ слеша (/).

    Запретить доступа к файлам с несколькими типами расширений

    Deny from all

    Запрещен доступ к файлам с расширением inc, conf и cfg

    Запретить доступ с определенного IP-адреса

    Deny from 195.135.232.70

    Разрешить доступ только с определенного IP-адреса

    Order deny,allow
    Deny from all
    Allow from 195.135.232.70

    Директива Order позволяет задать порядок, в котором будут выполняться директивы. Сначала выполняется директива запрета доступа(директива Deny), а затем разрешается доступ то для IP-адреса 195.135.232.70 (директива Allow). Если в первой строке поменять порядок следования директив на Order allow,deny, то доступ для IP-адреса 195.135.232.70 не будет открыть, т.к. директива Deny, выполняемая последней, перекроет действие директивы Allow.

    Примечание
    Следует отметить, что разрешение доступа с определённого IP-адреса иногда может не сработать. Например, в том случае, если на хостинге установлен обратный кэширующий proxy-сервер. Если директивы разрешения доступа не работают, то вам нужно обратиться по этому вопросу в службу технической поддержки хостинга.

    Представляю вашему вниманию — подборку правил для.htaccess, собранную автором JP в блоге DevMoose - с моими комментариями и дополнениями.

    Обсуждение — приветствуется!

    При правильном использовании, конфигурационный файл web-сервера Apache — .htaccess (hypertext access) представляет собой очень мощное средство в инструментарии разработчика. По-обыкновению, основной файл располагается в корневой директории вашего web-сервера (также могут присутствовать отдельные файлы в каждой папке — для управления доступом) и может быть откорректирован с помощью любого текстового редактора. В этой статье я покажу вам 20 правил для.htaccess и поясню для чего их использовать.

    Прежде чем мы начнем, обращаю ваше внимание на тот факт, что злоупотребление использованием.htaccess может привести к снижению производительности вашего сайта . Использовать.htaccess для реализации той или иной задачи стоит только в том случае, если нет других вариантов.

    Убедитесь в том, что вы сделали резервную копию оригинального файла.htaccess для вашего сайта, прежде чем вносить какие-либо изменения.

    Кроме того, помните — работоспособность указанных ниже правил зависит от настроек вашего web-сервера, заданных хостером. Некоторые директивы могут быть запрещены и не работать.

    .htaccess (от. англ. hypertext access) - файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла.

    Файл.htaccess может быть размещён в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах (если эти директивы не переопределены директивами нижележащих файлов.htaccess).

    Для того чтобы эти файлы.htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла (значение директивы AllowOverride должно быть установлено All). Как правило, подавляющее большинство хостеров разрешают использовать свои файлы.htaccess.

    1. Запрещаем загрузку файлов с внешних сайтов

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

    Options +FollowSymlinks #Запрещаем загрузку файлов с внешних сайтов RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www.)?domainname.com/ RewriteRule .*.(gif|jpg|png)$ http://domainname.com/img/stop_stealing_bandwidth.gif

    Не забудьте изменить domainname.com на ваше доменное имя и создать изображение stop_stealing_bandwidth.gif , которое будет показано вместо запрошенной картинки.

    2. Блокируем все запросы от нежелательных User Agents

    Это правило позволяет заблокировать нежелательные User Agent, которые могут быть потенциально опасными или просто перегружать сервер ненужными запросами.

    #Блокируем плохих ботов и роботов SetEnvIfNoCase user-Agent ^FrontPage SetEnvIfNoCase user-Agent ^Java.* SetEnvIfNoCase user-Agent ^Microsoft.URL SetEnvIfNoCase user-Agent ^MSFrontPage SetEnvIfNoCase user-Agent ^Offline.Explorer SetEnvIfNoCase user-Agent ^ebandit SetEnvIfNoCase user-Agent ^Zeus Order Allow,Deny Allow from all Deny from env=bad_bot

    3. Запрещаем доступ для всех, кроме указанных IP-адресов

    Если по какой-либо причине, вы хотите запретить всем или разрешить только отдельным IP-адресам доступ к вашему сайту — добавьте этот код в ваш.htaccess-файл:

    #Запрещаем доступ для всех, кроме указанных IP-адресов ErrorDocument 403 http://www.domainname.com Order deny,allow Deny from all Allow from 124.34.48.165 Allow from 102.54.68.123

    Не забудьте изменить domainname.com на ваше доменное имя.

    4. Настраиваем SEO-Friendly 301 Redirect

    Если вы перенесли доменное имя или хотите перенаправлять пользователя на определенную страницу (страницы), без санкций со стороны поисковых машин, используйте этот код:

    #Настраиваем SEO-Friendly 301 Redirect Redirect 301 /d/file.html http://www.domainname.com/r/file.html

    Не забудьте изменить domainname.com на ваше доменное имя, а /d/file.html и /r/file.html на соответствующие директории и страницы.

    5. Создаем собственные страницы ошибок

    Вам надоел стандартный вид страниц ошибок? Нет проблем — с помощью следующего кода, вы легко можете создать свою страницу и показывать пользователю именно ее:

    ErrorDocument 401 /error/401.php ErrorDocument 403 /error/403.php ErrorDocument 404 /error/404.php ErrorDocument 500 /error/500.php

    Не забудьте создать в корневой директории вашего сервера папку error и разместить в ней соответствующие файлы.

    6. Создаем черный список IP адресов

    Устали от спам-комментариев или определенного пользователя? Просто заблокируйте его IP с помощью следующего кода, добавляемого в.htaccess-файл.

    #Создаем черный список IP адресов allow from all deny from 145.186.14.122 deny from 124.15.

    Узнать IP адреса комментаторов можно или в логах Apache или с помощью сервисов статистики. Для WordPress, IP адреса комментаторов можно увидеть в административной панели.

    7. Устанавливаем e-mail адрес по-умолчанию для администратора сервера

    Используйте данный код, для того, чтобы установить e-mail адрес по-умолчанию для администратора сервера.

    #Устанавливаем e-mail адрес по-умолчанию для администратора сервера ServerSignature EMail SetEnv SERVER_ADMIN [email protected]

    Не забудьте заменить [email protected] — своим e-mail адресом.

    8. Защищаем определенный файл

    Нижеследующий код позволяет вам запретить доступ к любому файлу — при запросе будет выдаваться ошибка 403. Для примере я закрыл доступ к самому файлу htaccess, повысив уровень безопасности сайта.

    #Защищаем.htaccess файл order allow,deny deny from all

    9. Сжимаем элементы с помощью mod_deflate

    В качестве альтернативы компрессии файлов с помощью Gzip, вы можете использовать mod_deflate (предположительно работает быстрее). Разместите следующий код в начале вашего файла.htaccess (также вы можете добавить.jpg|.gif|.png|.tiff|.ico):

    #Сжимаем элементы с помощью mod_deflate SetOutputFilter DEFLATE

    10. Добавляем срок жизни в заголовки

    Данный код позволяет добавить сроки жизни в заголовки:

    #Добавляем срок жизни в заголовки Header set Expires "Wed, 21 May 2010 20:00:00 GMT"

    11. Устанавливаем страницы по-умолчанию

    Обычно страницей по-умолчанию является index.html, однако с помощью этого кода вы можете настроить по-умолчанию любую другую страницу.

    #Устанавливаем альтернативную страницу по-умолчанию DirectoryIndex about.html

    12. Защищаем паролем папки и файлы

    Вы можете включить проверку пароля для доступа в любую папку или файл на вашем сервере, используя этот код:

    #защита паролем файла AuthType Basic AuthName "Prompt" AuthUserFile /pub/home/.htpasswd Require valid-user #защита паролем папки resides AuthType basic AuthName "This directory is protected" AuthUserFile /pub/home/.htpasswd AuthGroupFile /dev/null Require valid-user

    Для того, чтобы организовать доступ к файлу по паролю, необходимо создать файл.htpasswd и внести в него пару логин-пароль в формате user:password .

    Однако в этом случае пароли будут хранится в открытом виде, что не слишком хорошо с точки зрения безопасности. Поэтому оптимальнее пароль зашифровать. Для этого воспользуйтесь сервисами генерации записей в файлы.htpasswd. Например, вот таким .

    В нашем примере файл с паролями доступа лежит в корневой директории сайта и называется.htpasswd. Директория указывается от корня сервера и если путь будет некорректным — Apache, не получив доступа к файлу, откажет в доступе к папке любому пользователю — в том чилсе и тому, который ввел правильную пару логин:пароль.

    13. Перенаправляем со старого домена — на новый

    Используя.htaccess, вы можете настроить перенаправление со старого доменного имени на новое, добавив следующий код:

    #Перенаправляем со старого домена - на новый RewriteEngine On RewriteRule ^(.*)$ http://www.domainname.com/$1

    Перенаправление используется в том случае, если вы переносите свой существующий сайт на новое доменное имя. В этом случае любой пользователь, который наберет в адресной строке http://www.old domainname.com — будет перенаправлен на http://www.domainname.com

    14. Усиливаем кеширование

    Использование этого правила не означает прямое ускорение загрузки вашего сайта. Оно предназначено для более быстрой загрузки сайта — для уже заходившего на него посетителя , путем отправки статуса 304 для тех элементов, которые не обновлялись. Таким образом, при повторной загрузке страницы браузер посетителя не будет заново скачивать изображения, скрипты или CSS, а выведет те файлы, которые уже хранятся в его кеше. Вы можете изменить срок жизни кеша, путем корректирования его значения в годах (year), месяцах (month) или, например — секундах (seconds). В примере указан 1 год.

    #Усиливаем кеширование FileETag MTime Size ExpiresActive on ExpiresDefault "access plus 1 year"

    15. Сжимаем компоненты сайта путем включения Gzip

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

    #Сжимаем компоненты сайта путем включения Gzip 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 no-gzip BrowserMatch bMSIE !no-gzip !gzip-only-text/html

    Обратите внимание, что включение компрессии приведет к большей нагрузке на процессор сервера.

    16. Удаляем «category» из URL

    #Удаляем category из URL RewriteRule ^category/(.+)$ http://www.yourdomain.com/$1

    Не забудьте изменить http://www.yourdomain.com на ваше доменное имя.

    17. Запрещаем просмотр содержимого папки

    Для того, чтобы ограничить доступ к директориям, которые могут содержать разнообразную информацию и для обеспечения безопасности сервера, добавьте этот код в файл.htaccess

    #Запрещаем просмотр содержимого папки Options All -Indexes

    Update: Jack.Sun предложил альтернативное решение, имеющее такой же результат — разместить в каждой папке файл index.html. От себя добавлю, что этот метод будет работать только в том случае, если вы не изменяли страницу по-умолчанию (см. правило #11). В этим случае, необходимо размещать файлы с тем новым именем, которое было задано вами в качестве страницы по-умолчанию.

    18. Перенаправляем RSS-ленту WordPress на FeedBurner

    Этот код позволяет перенаправить RSS-ленту WordPress на сервис Google Feedburner.

    #Перенаправляем RSS-ленту WordPress на FeedBurner RewriteEngine on RewriteCond %{HTTP_USER_AGENT} !FeedBurner RewriteCond %{HTTP_USER_AGENT} !FeedValidator RewriteRule ^rss.xml$ http://feeds.feedburner.com/yourfeed

    19. Запрещаем комментарии от пользователей без Referrer

    Чаще всего спам-боты обращаются напрямую к файлу wp-comments-post.php , не заходя на страницы записей вашего блога. Приведенный ниже код позволяет заблокировать комментарии, отправленные пользователями, которые пришли «из ниоткуда», позволяя комментировать тем читателям, которые перешли на страницу вашего блога с каких-либо других страниц (например, результатов поиска Google).

    #Запрещаем комментарии от пользователей без Referrer RewriteEngine On RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} .wp-comments-post\.php* RewriteCond %{HTTP_REFERER} !.*yourblog.com.* RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http://%{REMOTE_ADDR}/$

    Не забудьте заменить yourblog.com на доменное имя вашего блога.

    20. Убираем расширение файла из URL

    Данный код позволяет удалить расширение файла.php (вы можете изменить его на любое другое, например — .html) из URL-адресов страниц.

    #Убираем расширение файла из URL RewriteRule ^(([^/]+/)*[^.]+)$ /$1.php [L]

    21. Защищаем сайт

    Данный код позволяет защитить сайт от scripts enjection и нежелательных модификаций _REQUEST и/или GLOBALS

    #Включаем отслеживание сим-ссылок Options +FollowSymLinks #Запускаем url_rewriting RewriteEngine On #Блокируем все ссылки, содержащие RewriteCond %{QUERY_STRING} (\|%3E) #Блокируем все скрипты, которые пытаются изменить переменные PHP Globals: RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%{0,2}) #Блокируем все скрипты, которые пытаются изменить переменную _REQUEST: RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%{0,2}) #Перенаправляем все подобные на страницу с ошибкой 403 - запрещено RewriteRule ^(.*)$ index.php

    Файл.htaccess используется для конфигурации сервера Apache, впрочем, и для нескольких других серверов тоже. Не смотря на странное расширение, он является простым текстовым файлом, который можно модифицировать в любом редакторе. В данном уроке мы рассмотрим, как.htaccess можно использовать в своих проектах.

    Файл.htaccess использует такой же формат, как и основной конфигурационный файл для Apache: httpd.conf . Большинство установок можно использовать и в том и в другом файлах.

    Установки, заданные в файле.htaccess в каталоге, будут иметь более высокий приоритет перед установками, заданными в httpd.conf , для данного каталога и его подкаталогов.

    Иногда файл.htaccess называется динамическим конфигурационным файлом, так как сервер читает его каждый раз, когда происходит запрос к каталогу, в котором он содержится. Данный факт означает, что изменения в файле.htaccess будут действовать немедленно, без перезагрузки сервера, в отличие от изменений основного конфигурационного файла. Также это означает, что вы немного теряете в производительности, когда используете файл.htaccess . Но он очень удобен для случаев, когда нет доступа к основному конфигурационному файлу сервера.

    Перенаправления и изменение URL

    Популярное использование файла.htaccess - задание перенаправлений или изменений URL. Данный метод помогает в целях SEO изменять имя домена, или перестраивать файловую структуру проекта, или делать длинные трудно запоминаемые адреса URL простыми и понятными.

    Перенаправления

    Перенаправления могут быть очень простыми, например:

    Redirect 301 ^old\.html$ http://localhost/new.html

    В данном случае используется код статуса HTTP 301 (перемещено постоянно) и все запросы к old.html перенаправляются на new.html . Здесь используется регулярное выражение для определения соответствия URL правилу, что добавляет сложности в построение правила, но придает уверенности в правильности URL. Требуется указывать полный адрес URL ресурса, на который происходит перенаправление.

    Изменения

    Правило изменения также может быть очень простым:

    RewriteEngine on RewriteRule ^old\.html$ new.html

    В данном примере происходит простое перенаправление с одного файла на другой, которое выполняется прозрачно, без изменения содержания адресной строки в браузере. Первая директива, RewriteEngine on , просто гарантирует, что механизм изменения запущен.

    Чтобы обновить содержание адресной строки браузера посетителя, мы можем использовать флаг R в конце правила RewriteRule:

    RewriteRule ^old\.html$ http://hostname/new.html

    Флаг r приводит к внешнему перенаправлению, поэтому адрес URL будет соответствовать новой странице. Также можно использовать код статуса для флага, что приведет к обновлению страницы в браузере посетителя.

    Одно возможное использование перенаправлений - изменение адресов URL к более простой форме для посетителей и поисковых роботов. Рассмотрим пример:

    RewriteRule ^products/([^/]+)/([^/]+)/([^/]+) product.php?cat=$1&brand=$2&prod=$3

    Данное правило позволяет использовать посетителю адрес URL наподобие products/turntables/technics/sl1210 , который будет трансформироваться в product.php?cat=turntables&brand=technics&prod=sl1210. Круглые скобки между слешами в регулярном выражении примера выполняют объединение в группы - мы можем использовать каждую из них как $1 , $2 и $3 соответственно. Комбинация [^/]+ в скобках соответствует любому символу, кроме слеша, в любых количествах.

    На практике, изменение URL имеет существенно более сложные правила, чем описанные в наших примерах, но они позволяют решить очень сложные задачи.

    Пользовательская страница ошибок

    Показывать на сайте стандартную страницу 404 - непрактично. На многих сайтах данная возможность используется, чтобы предложить посетителю страницу ошибок, которая соответствует по стилю остальному содержанию и несет дополнительную информацию, которая может удержать посетителя.

    Правило для изменения странницы 404 очень похоже на правило перенаправления:

    ErrorDocument 404 "/404.html"

    Если происходит ошибка 404, будет выводиться указанная страница. Также можно сделать страницы для отображения других серверных ошибок.

    Ограничения доступа к определённым ресурсам

    С помощью файла.htaccess мы можем ограничить доступ к любому файлу или каталогу. Например, код:

    AuthName "Введите имя пользователя и пароль" AuthUserFile /path/to/.htpasswd Require valid-user AuthType Basic

    Нужно разместить в каталоге, который требуется защитить от свободного доступа. Директива AuthName определяет сообщение, которое будет выводиться в диалоговом окне для ввода пароля, а в правиле AuthUserFile определяется путь к файлу.htpasswd . Директива Require определяет, что только зарегистрированные пользователи могут получить доступ к файлу.

    Для защиты определенного файла нужно заключить выше приведенный код в директиву , в которой определяется имя файла:

    AuthName "Введите имя пользователя и пароль" AuthUserFile /path/to/.htpasswd Require valid-user AuthType Basic

    Для использования данной возможности требуется файл.htpasswd, который содержит разделенный двоеточиями список имен пользователей и зашифрованных паролей для доступа к закрытым ресурсам. Данный файл должен храниться в каталоге, недоступном из сети. Существуют различные инструменты для генерации такого файла автоматически, так как пароль должен храниться в зашифрованном виде.

    Блокируем доступ для определенных посетителей

    Еще одним использованием файла.htaccess является быстрое и простое блокирование всех запросов с определенного IP адреса или агентов. Нужно просто добавить в файл.htaccess правила:

    Order allow,deny deny from 192.168.0.1 allow from all

    Директива order указывает серверу Apache в каком порядке рассматривать директивы allow/ deny . В примере директива allow оценивается первой, а затем следует работа с deny . Правило allow from all рассматривается первым (несмотря на то, что в файле оно определено после правила deny) и все IP адреса разрешаются. Затем, если IP адрес клиента соответствует указанному в директиве deny , то доступ ему блокируется. Можно блокировать доступ диапазону IP адресов, указав, например, 192.168 .

    Для блокирования доступа определенным агентам, можно использовать другие правила:

    RewriteCond %{HTTP_USER_AGENT} ^OrangeSpider RewriteRule ^(.*)$ http://%{REMOTE_ADDR}/$

    В данном примере любой клиент, у которого строка HTTP_USER_AGENT начинается с OrangeSpider (плохой бот), будет перенаправлен по адресу, с которого пришел. Регулярное выражение соответствует любому единичному символу (.) в любых количествах (*) , а для адреса используется переменная %{REMOTE_ADDR} . Флаг l указывает для сервера Apache, что данное правило является последним для клиента и никаких других операций для него выполнять не нужно.

    Указываем для IE режим вывода

    Кроме управления ответами сервера на определенные запросы, мы можем влиять на браузеры пользователей, например, указывать IE определенный механизм вывода. Можно использовать модуль mod_headers, если он присутствует для установки заголовка X-UA-Compatible:

    Header set X-UA-Compatible "IE=Edge"

    Добавление данной строки в файл.htaccess выдаст инструкцию для IE использовать самый лучший доступный режим вывода. Мы также можем избежать использования данного заголовка для файлов, где он не требуется, с помощью правила :

    Header unset X-UA-Compatible

    Включаем кеширование

    Кеширование очень просто устанавливается и делает загрузку вашего сайта быстрее. Устанавливая дату обновления для ресурсов, которые редко изменяются, мы можем предотвратить многократную повторяющуюся загрузку той части содержания, которая остается неизменной.

    Например:

    ExpiresActive on ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType video/ogg "access plus 1 month" ExpiresByType audio/ogg "access plus 1 month" ExpiresByType video/mp4 "access plus 1 month" ExpiresByType video/webm "access plus 1 month"

    Вы можете добавлять правила ExpiresByType для любых типов содержания. Директива ExpiresActive on просто включает генерацию заголовка устарения ресурса. Данная директива зависит от наличия модуля mod_expires на сервере Apache.

    Разрешаем сжатие

    Еще одним способом влияния на производительность ресурса является использование сжатия:

    FilterDeclare COMPRESS FilterProvider COMPRESS DEFLATE resp=Content-Type $text/html FilterProvider COMPRESS DEFLATE resp=Content-Type $text/css FilterProvider COMPRESS DEFLATE resp=Content-Type $text/javascript FilterChain COMPRESS FilterProtocol COMPRESS DEFLATE change=yes;byteranges=no

    Данная схема сжатия работает на новых версиях Apache (2.1+) с установленным модулем mod_filter . Он использует алгоритм DEFLATE для сжатия содержания. В примере мы указываем text/html , text/css и text/javascript в качестве типов ресурсов, которые будут сжиматься.

    Определение фильтра начинается с директивы FilterDeclare с опцией COMPRESS . Затем перечисляются типы содержания, на которые будет действовать фильтр. Правило FilterChain указывает серверу построить цепочку на основании списка правил FilterProvider . Директива FilterProtocol позволяет задавать опции, которые используются фильтром при выполнении. Необходимо указать опции change=yes (содержание может изменяться фильтром (в нашем примере - сжиматься)) и byteranges=no (фильтр может использоваться только к полным файлам).

    В старых версиях Apache используется модуль mod_deflate для конфигурирования сжатия DEFLATE. Здесь имеется меньше возможностей для управления фильтром, но правила более простые:

    SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/html text/css text/javascript

    В примере устанавливается алгоритм компрессии с помощью правила SetOutputFilter и определяются типы файлов содержания для фильтра с помощью правила AddOutputFilterByType .

    Обычно сервер использует один из описанных модулей, в зависимости от версии сервера Apache. Как правило, вы знаете какой модуль будет использоваться. Но если создается обобщенный файл htaccess , который может быть использован на разных серверах, то можно в него включить оба набора правил с помощью директивы . Таким образом будут использоваться нужные правила и удастся избежать генерации ошибки 500, если в файле конфигурации встречаются правила для неустановленных модулей. Также нужно помнить, что при размещении серверов на хостинге, который поддерживает большое количество сайтов на одном процессорном блоке, компрессия может быть отключена, чтобы не создавать большой нагрузки

    Заключение

    В данном уроке рассмотрены наиболее часто используемые применения файла htaccess . Приведенная здесь информация является введением в очень популярную тему. Имеется много других опций и конфигураций, которые стоит изучить и использовать в своих интересах.





    

    2024 © gtavrl.ru.