Файл htaccess изменяет настройки сервера которые влияют. Как создать и правильно настроить файл htaccess? Как запретить просмотр содержимого конкретной папки

Файл htaccess изменяет настройки сервера которые влияют. Как создать и правильно настроить файл htaccess? Как запретить просмотр содержимого конкретной папки

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

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

Важно! Как правило, файл.htaccess устанавливается на хостинге (веб-сервере) вместе с установкой сайта, но если его там нет, тогда вы можете создать этот файл с помощью блокнота. Для этого откройте блокнот, добавьте туда необходимые для вас директивы, примеры которых будут приведены ниже, и сохраните как текстовый документ, с названием – .htaccess. Потом просто уберите расширение.txt, и файл готов.

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

Важно! Работоспособность указанных ниже правил (директив) зависит от настроек вашего web-сервера, заданных хостером, поэтому некоторые директивы могут быть запрещены и не работать.

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

Правила.htaccess

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

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

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

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

#Блокируем нежелательных ботов и роботов
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

Список User Agent браузеров, роботов и пауков поисковых машин, веб-каталогов, менеджеров закачек, спам-ботов и плохих ботов можно найти на сайте http://www.user-agents.org/

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

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

Не забудьте изменить your_domain.com и IP1,2 и т.д. на ваше доменное имя и необходимые IP-адреса соответственно.

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

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

В случае, если причиной блокировки IP-адреса является назойливые спам-комментарии, узнать IP-адреса комментаторов можно или в логах Apache, или с помощью сервисов статистики. Для WordPress, IP-адреса комментаторов можно увидеть в административной панели. Таким же образом возможно заблокировать доступ на сеть IP-адресов, указав «deny from IP/маска сети».

#Создаем черный список для подсети
allow from all
deny from 192.168.0.0/24

5. Настраиваем SEO-Friendly 301 Redirect
Если вы перенесли доменное имя или хотите перенаправлять пользователя на определенную страницу (страницы), без санкций со стороны поисковых машин, используйте этот код:

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

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

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

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

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

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

#Устанавливаем e-mail адрес по умолчанию для администратора сервера
ServerSignature EMail
SetEnv SERVER_ADMIN default@your_domain.com

Не забудьте заменить default@your_domain.com- необходимым вам e-mail адресом.

8. Защищаем определенный файл
Приведенный ниже код позволяет вам запретить доступ к любому файлу - при запросе будет выдаваться ошибка 403. На примере закрыт доступ к самому файлу.htaccess – таким образом можно повысить уровень безопасности сайта:

#Защищаем.htaccess файл

order allow,deny
deny from all

9. Сжимаем компоненты сайта путем включения 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

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

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

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


SetOutputFilter DEFLATE

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

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

Header set Expires “Wed, 31 December 2014 20:00:00 GMT+2”

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

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

Не забудьте заменить yourpage.html - необходимой вам страницей

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

#защита паролем файла

AuthType Basic
AuthName “Prompt”

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.
Например, http://www.htaccesstools.com/htpasswd-generator/
В примере файл с паролями доступа лежит в корневой директории сайта и называется.htpasswd. Директория указывается от корня сервера и если путь будет некорректным - Apache, не получив доступа к файлу, откажет в доступе к папке любому пользователю - в том числе и тому, который ввел правильную пару логин: пароль.

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

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

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

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

#Усиливаем кеширование
FileETag MTime Size


ExpiresActive on
ExpiresDefault “access plus 1 month”


В примере указан 1 месяц.

16. Удаляем «category» из URL
Для изменения ссылки http://yourdomain.com/category/news на http://yourdomain.com/news, просто добавьте следующий код в конце вашего.htaccess файла:

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

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

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

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

Существует альтернативное решение, имеющее такой же результат, для этого необходимо разместить в каждой папке вашего сайта пустой файл index.html . Этот метод будет работать только в том случае, если вы не изменяли страницу по умолчанию (см. правило 12). Если изменения были проведены, необходимо размещать файлы с тем новым именем, которое было задано вами в качестве страницы по умолчанию.

18. Перенаправляем RSS-ленту WordPress на FeedBurner
Этот код позволяет перенаправить RSS-ленту СMS 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

Изначально необходимо зарегистрировать ленту своего блога в сервисе Feedburner от Google. Далее не забудьте заменить yourfeed на имя вашей ленты уже в Feedburner .

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

#Запрещаем комментарии от пользователей без 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 (вы можете изменить его на любое другое, например на т 2.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

Сейчас для организации работы подавляющего большинства сайтов в сети используется веб-сервер 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:

Представляю вашему вниманию — подборку правил для.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 default@domain.com

Не забудьте заменить default@domain.com — своим 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

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-сервер. Если директивы разрешения доступа не работают, то вам нужно обратиться по этому вопросу в службу технической поддержки хостинга.



просмотров