Трюки с htaccess: htaccess доступ, htaccess кодировка, htaccess запреты. Блокируем ненужных User Agent-ов

Файл.htaccess (англ. hypertext access) используется для простой и удобной настройки веб-сервера на котором хранится сайт пользователя. Соответственно меняя настройку веб-сервера, мы сможем поменять работу сайта. Как правило, файл.htaccess находится в корневом каталоге, а его действие распространяется на весь сайт и на все подкаталоги. Если же в другом каталоге содержится свой.htaccess, то он будет действовать только на свой каталог и подкаталоги.

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

Где находиться файл.htaccess?

Обычно он располагается в коневом каталоге сайта. Иногда, в различных CMS может находится файл htaccess.txt, который никак не воспринимается сервером и ни на что не влияет. Чтобы он начал работать нужно его переименовать в.htaccess. Если это не получится сделать на вашем компьютере, то зайдите на свой сервер через FTP-клиент, и переименуйте файл прямо сервере.

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

Как проверить работает ли.htaccess?

Все просто, напишите в первой строчке этого файла любое слово (например YAROBOT), сохраните файл и замените им находящийся на сервере. Если сайт продолжит работать, то.htaccess в данный момент не работает. Если же появится ошибка 500 Internal Server Error, то это значит, что веб-сервер не смог понять команду (YAROBOT) и выдал ошибку. Этот факт подтвердит, что работа.htaccess на сервере поддерживается и включена в данный момент. Чтобы вернуть сайту работоспособность удалите строчку с YAROBOT.

Правильный 301 редирект через файл.htaccess

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

301 Редирект с одной страницы на другую (или сайт)

Для этого в файл.htaccess вносим следующие строки:

Redirect 301 /старая-страница.html http://сайт.рф/новая-страница.html

RedirectPermanent /старая-страница.html http://сайт.рф/новая-страница.html

301 Редирект с www-сайта на сайт без www

Например перенаправление с http://www.site.com на http://site.com. Это очень полезная вещь, часто используется в СЕО

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domain\.com$
RewriteRule ^(.*)$ http://domain.com/$1

Обратный редирект с домена без www на домен с www

Перенаправление с http://site.com на http://www.site.com (не советуем использовать)

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain\.com$
RewriteRule ^(.*)$ http://www.domain.com/$1

Редирект всех посетителей со старого сайта на новый

Redirect 301 / http://newsite.com/

Как добавить.html в конце URL?

Чтобы при вводе site.com/page или site.com/page/ происходило перенаправление на site.com/page.html пишем в.htaccess следующее:

RewriteCond %{REQUEST_URI} (.*/[^/.]+)($|\?)
RewriteRule .* %1.html
RewriteRule ^(.*)/$ /$1.html

Как убрать.html в конце URL?

Обратный редирект с site.com/page.html на site.com/page

RewriteBase /
RewriteRule (.*)\.html$ $1

Как убрать слэш в конце URL?

Например было site.com/page/, стало site.com/page

RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1

301 Редирект с одного раздела на другой?

Перенаправление всех страниц одного раздела site.com/razdel-1/razdel-2/page на на страницы другого раздела site.com/razdel-1/page

RewriteRule ^blog/raznoe/(.*)$ http://site.ru/blog/$1

301 Редирект при переезде со старого домена на новый

Следующее правило корректно перенаправит посетителей с каждой конкретной страницы старого сайта на такую же страницу на новом сайте. Например со страницы oldsite.com/page на newsite.com/page

RewriteCond %{HTTP_HOST} ^www.oldsite.com$
RewriteCond %{HTTP_HOST} ^test.oldsite.com$
RewriteRule ^(.*)$ http://newsite.com/$1

Правильное изменение страниц ошибок через.htaccess

Когда пользователь хочет увидеть сайт (отправляет запрос на сервер хостера), то сервер возвращает ему ответ с кодом. Коды 1-399 свидетельствуют о нормальной работе сервера, а коды 400-599 сообщают об ошибке сервера (коды всех ошибок смотрите в спец. статье). Например, если сервер с вашим сайтом перегружен, или у него происходит перезагрузка, то пользователь увидит непонятный ему текст (например, 500 Internal Server Error), подумает, что сайт больше не будет работать и больше никогда на него не вернется. Чтобы вместо стандартной страницы ошибки (непонятно для пользователя) показать ему вашу отдельную страницу, на которой будет например, сообщение о том, что сайт временно не работает, но позже восстановит свою работу и на него обязательно стоит вернуться (сайт КиноПоиск при перегрузки серверов выдает сообщение "Матрица перезагружается..." и соответствующую картинку). Наиболее распространенным решением является составление собственной страницы вместо стандартной 404-ошибки. Эта ошибка показывается пользователю, если введен адрес несуществующей страницы. Думающие вебмастеры, создают свою страницу вместо непонятной стандартной, на которой пишут, что человек перешел по несуществующей ссылке и предлагают поискать нужную информацию на сайте, а не уйти с него. Пример нашей 404-страницы можно увидеть . Чтобы показывать пользователям свою страницу ошибки вместо стандартной, нужно создать отдельную страницу (например http://yoursite.com/404.html) и добавить соответствующий код в файл.htaccess Вот примеры кода, который нужно добавить:

ErrorDocument 400 http://yoursite.com/400.html
ErrorDocument 404 http://yoursite.com/404.html
ErrorDocument 500 http://yoursite.com/500.html

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

ErrorDocument 403 "Sorry can"t allow you access today, see you later alligator:)"

Настройки безопасности сайта через файл.htaccess

Файл.htaccess дает большие возможности для улучшения безопасности сайта. Наиболее популярные мы сейчас перечислим:

Защита сайта от скриптовых инъекций

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

Как защитить сайт от кражи картинок

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

Options +FollowSymlinks
#Запрещает кражу картинок
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?yoursite.com/
RewriteRule .*.(gif|jpg|png)$ http://yoursite.com/images/stop_stealing.gif

yoursite.com - адрес вашего сайта
http://yoursite.com/images/stop_stealing.gif - путь к картинке, которую вы сами должны создать. На ней обычно пишут "не крадите картинки с чужих сайтов" или что-то подобное.

Как заблокировать доступ к сайту для пользователя по IP?

Применяется против спамеров и прочих неадекватов, изредка для предотвращения хакерских атак.

#Вносим сюда нежелательные IP адреса
allow from all
deny from 164.186.15.116
deny from 124.153.34.144

Как заблокировать доступ к сайту для всех IP кроме проверенных?

Чтобы заблокировать доступ для всех, кроме конкретных IP-адресов, добавляем такой код:

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

Как запретить просмотр содержимого конкретной папки

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

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

#Защищает файл myfile.txt

order allow,deny
deny from all

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

Например чтобы запретить доступ ко всем файлам.txt пишем так:


Order Deny,Allow
Deny from all

Блокируем ненужных User Agent-ов

Часто у пользователя в браузере установлено очень много расширений, которые передают серверу (на котором расположен ваш сайт) информацию о себе и другую лишнюю информацию. Такую же информацию посылают на сервер клиентские приложения установленные на компьютере пользователя, а также различные роботы и пауки. Информацию о большинстве актуальных на сегодня "Юзер Агентах" можно найти .

#Блокирует нижеперечисленных 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

Изменение кодировки сайта через.htaccess

Бывает такое, что один пользователь заходит к вам на сайт и видит его нормальным, а другой видит абракадбру вместо букв. Это происходит из-за кодировки сайта. Чтобы браузер пользователя правильно ее распознал, сайт делается в одной из популярных кодировок:

UTF-8 - универсальная двухбайтовая кодировка
Windows-1251 - Кириллица (Windows)
KOI8-r - Кириллица (КОИ8-Р)
cp866 - Кириллица (DOS)
Windows-1250 - Центральная Европа (Windows)
Windows-1252 - Западная Европа (Windows)

Также кодировку нужно указывать в мета-теге каждой страницы сайта, это сообщает браузеру в какой кодировке сделан сайт.

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

AddDefaultCharset WINDOWS-1251

Если работают оба варианта (и мета-тег, и файл.htaccess), то очень важно, чтобы кодировка в них совпадала.

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

Чтобы выключить перекодировку сервера нужно вписать:

Оптимизация работы сайта через.htaccess

Ускорение работы сайта через Gzip

Включение данной функции позволяет серверу сжать информацию, перед тем, как он отправит ее пользователю. В итоге скорость работы сайта возрастет, но это немного увеличит нагрузку на сервер (на котором хранится ваш сайт), т.к. ему придется выполнять операцию сжатия налету. Чтобы включить Gzip-сжатие в файл.htaccess нужно добавить следующие строки (попробуйте поочередно добавить 3 варианта кода, проверяя скорость , и оставьте тот вариант, который дает наибольшее ускорение):


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

mod_gzip_on Yes
mod_gzip_item_include file \.js$
mod_gzip_item_include file \.css$

FileETag MTime Size


ExpiresActive on



mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*

Как улучшить кэширование сайта на сервере?

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


ExpiresActive On
ExpiresByType application/javascript "access plus 7 days"
ExpiresByType text/javascript "access plus 7 days"
ExpiresByType text/css "access plus 7 days"
ExpiresByType image/gif "access plus 7 days"
ExpiresByType image/jpeg "access plus 7 days"
ExpiresByType image/png "access plus 7 days"
FileETag MTime Size


ExpiresActive on
ExpiresDefault "access plus 1 month"

В выражении "access plus ..." установите срок хранения файлов на компьютере пользователя. По истечении этого срока, при запросе к сайту файлы будут единоразово загружены с сервера. Оптимальным будет от 7 дней до месяца, хотя иногда устанавливается и год.

Изменение главной (индексной) страницы сайта

Как правило при заходе на сайт сначала загружается страница index.html или index.php. Чтобы изменить это правило (в начале станет загружаться mypage.php) добавляем в.htaccess такой код:

Настройка PHP-параметров через файл.htaccess

Обычно за настройки PHP отвечает файл php.ini, но часть этих настроек можно задать через.htaccess. Для этого используются два выражения: php_value - для логических значений (например включить\выключить), и php_flag для числовых значений. Вот правила написания этих выражений:

php_flag директива1 ЗНАЧЕНИЕ1
php_value директива2 ЗНАЧЕНИЕ2

где ЗНАЧЕНИЕ1 может быть on, off, 1 или 0 (1 и on - означает включить, а 0 и off - выключить);

ЗНАЧЕНИЕ2 - любое числовое или буквенное значение, которое подходит под конкретную директиву;

директива1 (используется только с php_flag) может иметь значения:

magic_quotes_gpc - вкл\выкл функцию magic_quotes_gpc


display_startup_errors - вкл\выкл показ ошибок, которые происходят при работе PHP

php_flag display_startup_errors 1


display_errors - вкл\выкл показ ошибки в браузер


output_buffering - вкл\выкл буферизацию вывода данных


register_globals - вкл\выкл глобальные переменные


engine - вкл\выкл исполнение PHP в папке в которой находится.htaccess и во всех вложенных

директива2 (используется только с php_value) может иметь такие значения:


upload_max_filesize - устанавливает максимальный размер загружаемого файла

php_value upload_max_filesize 10M


user_agent - задает значение строки user_agent, которую передает сервер

php_value user_agent “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)”


post_max_size - задает максимальный размер пересылаемой почты


mysql.default_user - задает имя пользователя базы данных

php_value mysql.default_user databaseuser


mysql.default_password - задает пароль для пользователя БД

php_value mysql.default_password jk323jh4g


mysql.default_host - задает имя хоста БД (обычно это localhost)

php_value mysql.default_host localhost


sendmail_from - задает имейл для отправки почты с помощью PHP


auto_prepend_file - задает файл, который будет добавлен в начало каждого PHP-скрипта

php_value auto_prepend_file /www/publiс_html/myfile.php


auto_append_file - задает файл, который будет добавлен в конец каждого PHP-скрипта

php_value auto_append_file /www/publiс_html/myfile.php

Файл htaccess - настройка и примеры использования - 4.1 out of 5 based on 18 votes

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

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

Что собой представляет файл htaccess и для чего используется

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

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

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

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

Некоторые особенности использования htaccess:

1. В нем можно переопределить большое количество директив, прописанных в главном файле httpd.confg

2. Если расположить htaccess-файл в корневой каталог, он распространится на весь сайт (исключения составят только те каталоги, в которых расположен собственный конфигурационный файл, и каталоги, расположенные ниже в древовидной структуре)

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

4. Htaccess не доступен пользователю для просмотра из браузера, так как относится к категории «системные».

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

  • Директивы простого перенаправления (редирект);
  • Директивы сложного перенаправления (mod_rewrite);
  • Индексные страницы;
  • Обработка ошибок;
  • Определение кодировки;
  • Управление доступом к директориям и файлам;
  • Паролирование директорий;
  • Опции PHP.

Примеры наиболее частого использования файла htaccess

Сейчас мы рассмотрим самые распрострнные рабочие варианты использования htaccess для настройки сайта.

Прежде чем мы приступим обратите внимание на следующие моменты:

2. Для того, чтобы создать новый файл с расширением htaccess, необходимо, открыть блокнот или другой текстовый редактор, написать код, сохранить файл, указав расширение.htaccess (точка в переди). Затем остается забросить его в директорию, для которой он предназначался.

3. Синтаксис.htaccess

Пути к файлам (директориям) указываются от корня сервера.

DirectoryIndex /home/st5155/www/data/home.html

В случае настройки файла htaccess лежащего в корневой папке сайта, пути указываются от корня этой папки.

DirectoryIndex /home.html

Домены записываются с указанием протокола http:// или https://

Redirect / http://vash-sait.ru

Файл имеет название именно "точка" htaccess.

Для создания закомментированной строчки используйте знак #.

Редактировать файл удобнее всего при помощи редактора AkelPad, входящего в состав Total Commander, достаточно его выделить и нажать F4.

Простое перенаправление - директива Redirect

1. Осуществление перенаправления на новые страницы сайта

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

Redirect 301 /staraya.html http://vash-sait.ru/novaya.html

2. Приведение фидов к общему формату

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

RedirectMatch 301 /feed/(atom|rdf|rss|rss2)/?$ http://vash-sait.ru/feed/

Сложное перенаправление - директива RewriteRule

1. Перенаправление домена с www на без www.

Очень часто приходится использовать 301 редирект в htaccess для склеивания доменов с www и без www. Раньше поисковые системы считали такие адреса совершенно различными и смотрели на них как на разные сайты. Сегодня задача по склейке возлагается на поискового робота, но никогда не лишним будет указать корректное зеркало. К тому же, у самих не будет никакой путаницы.

Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP_HOST} ^www.vash-sait\.ru$ RewriteRule ^(.*)$ http://vash-sait.ru/$1

2. Перенаправление посетителей на разные старницы в зависимости от IP-адреса посетителя.

В htaccess имеется возможность указать на какую страницу, будет перенаправлен пользователь с конкретным IP-адресом. Например, перенаправление посетителей с ip адресом 183.11.101.1 на страницу kontakt.html

SetEnvIf REMOTE_ADDR 183.11.101.1 REDIR="redir" RewriteCond %{REDIR} redir RewriteRule ^/$ /kontakt.html

3. Перенаправление в случае обновления веб-ресурса

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

RewriteEngine on RewriteCond %{REQUEST_URI} !/info.html$ RewriteCond %{REMOTE_HOST} !^14\.124\.354\.80 RewriteRule $ http://vash-sait.ru/info.html

Где 14.124.354.80 - заменить на свой IP адресс.

4. Защита от хотлинков

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

RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://([ -a-z0-9] \.)?vash-sait\.ru RewriteRule \.(gif|jpe?g|png)$ -

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

RewriteRule \.(jpg|png|gif)$ http://vash-sait.ru/images/imageinfo.jpg

5. Перенаправление на безопасное https-соединение

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

RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

6. Автоматическая подстановка слеша в конце адреса.

Очень распространены ситуации, когда URL-адрес, заканчивается именем каталога: http://vash-sait.ru/images/raznoe

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

RewriteCond %{REQUEST_URI} /+[^\.]+$ RewriteRule ^(.+[^/])$ %{REQUEST_URI}/

7. Блокировка пользователей пришедших с определенного сайта

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

RewriteEngine on RewriteCond %{HTTP_REFERER} zapretnui-sait.com RewriteCond %{HTTP_REFERER} zapretnui-sait.com RewriteRule .* - [F]

Индексные страницы - директива DirectoryIndex

1. Изменение индексной старницы загружаемой по умолчанию

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

DirectoryIndex mypage.html

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

DirectoryIndex index.shtml index3.php index.html index.htm

Обработка ошибок - директива ErrorDocument

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

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

ErrorDocument 404 "/404.html"

2. Создание своих страниц с описанием ошибок

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

ErrorDocument 401 /errors401.html ErrorDocument 403 /errors403.html ErrorDocument 404 /errors404.html ErrorDocument 500 /errors505.html

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

  • 401 - Требуется авторизация (Authorization Required)
  • 403 - пользователь не прошел аутентификацию, запрет на доступ (Forbided)
  • 404 - запрашиваемый документ (файл, директория) не найден (Not Found)
  • 500 - внутренняя ошибка сервера - ошибка скрипта или ошибка в синтаксисе файла.htaccess - (Internal Server Error)

Определение кодировки

1. Определение кодировки, в которой сервер "отдает" файлы

Чтобы у пользователя на дисплее монитора не выводились непонятные для него символы, из которых не представляется возможности прочесть слова, необходимо указать корректную кодировку. Даже при отсутствии тега < Мета http-equiv = "Content-Type"> текст на странице будет всегда корректным и поможет в этом снова htaccess-файл.

AddDefaultCharset UTF-8

2. Определение кодировки на загружаемые файлы

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

CharsetSourceEnc UTF-8

Управление доступом к директориям и файлам

1. Запретить доступ ко всем файлам

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

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

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

Что такое файл.htaccess и как его создать?

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

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

Возможно, на вашем сайте уже есть файл.htaccess. Тогда создавать его повторно не нужно, достаточно дописать новые правила в конец существующего файла. Если такого файла нет, создайте его. Для этого в файловом менеджере (пункт «Файлы» в верхнем меню панели управления), находясь в нужной папке, нажмите «Создать» — «Файл», в качестве имени файла укажите: .htaccess (точка в начале обязательна). Готово. Осталось наполнить его нужными правилами.

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

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

Если вы хотите закрыть доступ к сайту целиком, добавьте в ваш файл.htaccess следующие правила:

Order deny,allow
Deny from all
Allow from *.*.*.*

Первая строчка в этой директиве задает порядок действий: сначала запретить, затем разрешить. Вторая строчка запрещает доступ всем (поскольку таков порядок, указанный в первой строчке). Третья строчка разрешает доступ только определенному IP-адресу. Так что вместо *.*.*.* подставьте разрешенный IP-адрес.

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

Например, если IP-адресов несколько:

Allow from *.*.*.*
Allow from *.*.*.*

Если адреса относятся к одной подсети, то задайте подсеть, для этого вместо цифр после последней точки укажите диапазон: 0/*, например:

Аналогичным образом вы можете указать несколько подсетей:

Allow from *.*.*.0/12
Allow from *.*.*.0/12

Если Вы хотите запретить доступ не ко всему сайту, а только к части сайта, то файл.htaccess следует создавать именно в той папке, доступ к которой вы хотите ограничить. Например, если вы хотите защитить административную часть сайта на WordPress, то файл.htaccess следует создавать именно в директории wp-admin. В строчке Allow from *.*.*.* следует указать ваш собственный IP-адрес.

Как узнать свой IP, подсеть?

Для определения Вашего IP воспользуйтесь сервисами для определения IP:

Для уточнения подсети можно использовать следующий сервис: ip-calculator.ru .

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

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

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

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

Order allow,deny
Allow from all
Deny from *.*.*.*

Вместо *.*.*.* подставьте нужный IP-адрес. В описанном случае с массовыми обращениями определить IP-адрес «виновника» поможет служба поддержки хостинга.

Здесь, как вы видите, порядок обратный: сначала мы разрешаем доступ всем, затем ограничиваем определенным IP-адресам. Точно так же, как в предыдущем примере, вы можете указать несколько IP-адресов (каждый с отдельной строчки), целую подсеть или несколько подсетей. Каждый IP-адрес или подсеть пишутся с новой строчки.

Установить пароль доступа к папке или поддомену

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

Установить пароль на папку вы можете прямо из Панели управления. Для достаточно кликнуть по полю с нужной папкой и выбрать функцию «Защита паролем», а затем задать пароль.

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

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

AuthName "your_text"
AuthType Basic
Require valid-user
AuthUserFile "полный_путь_к _файлу_.htpasswd"

В первой строке (AuthName) вместо "your_text" укажите любое сообщение, которое будет отображаться при попытке обращения к защищенной директории. Например: "Private zone" или "Administrators Only" , или что-то еще на ваше усмотрение. Важно! Значение текста в поле AuthName не должно содержать кириллицы и специальных символов .

Строчка Require valid-user означает, что имя пользователя может быть любым. Мы рекомендуем это так и оставить. Но вы при желании можете указать список имен пользователей, которым разрешен вход. Для этого в данной строчке после Require следует через запятую указать разрешенные имена. Valid-user в этом случае не дописываем.

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

Для этого создайте в файловом менеджере новый файл и назовите его.htpasswd (точка в названии также обязательна). Файл следует создавать в папке того домена, для которого вы задаете пароль (в корневой папке найдите папку domains и в ней нужный домен).

Для генерации логина и пароля в зашифрованном виде используйте либо утилиту консоли.htpasswd (этот способ больше подойдет специалисту), либо сторонние сервисы с аналогичными функциями, например, вот этот: Htpasswd-generator . Последнее совсем просто: задайте пароль и логин — и получите зашифрованную строчку. Эту строчку следует скопировать и вставить в ваш файл с именем.htpasswd.

Вернемся к оформлению директивы. Путь к файлу.htpasswd указывается в полном формате: /home/login/domains/domain.ru/.htpasswd

Пример правильно оформленной директивы:

AuthName "Private zone!"
AuthType Basic
Require valid-user
AuthUserFile /home/a0000001/domains/mydomain/.htpasswd

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

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

Кому нужен запрет доступа и как им пользоваться

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

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

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

Как запретить доступ к файлу, каталогу, сайту через htaccess

Для управления уровнем доступа к сайту, файлу или папке вам необходимо будет использовать директивы Deny и Allow. Первая директива нужна, чтобы запретить доступ, а вторая — чтобы разрешить. Во многом эти директивы зависят от того, куда вы поместите файл htaccess. Если он будет расположен в корневом каталоге, то запрет или разрешение будет действовать на весь сайт целиком. Если же вы загрузите htaccess в какую-то папку, то опции Deny и Allow будут действовать на каталог, в котором находится, а также на внутренние папки. Именно таким образом и блокируют доступ к определенным директориям и разделам сайта.

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

Order Deny,Allow - открытие функции.
Deny from all - указание правила.

Нижняя строка говорит: «Запретить (deny) для (from) всех (all)». Точно таким же образом вы можете вместо Deny прописать Allow для активации противоположной опции. Но поскольку эта опция активирована по умолчанию, нет смысла ее дополнительно указывать в htaccess. Allow from скорее используют для того, чтобы указывать исключения, то есть чтобы сформировать белый список пользователей.

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

Order Deny,Allow
Deny from all
Allow from 136.68.81.3, 135.67.82.1 - IP писать через запятую.

По аналогии с написанной функцией вы сможете блокировать только определенные адреса IP. Только для этого вам нужно будет сначала прописать разрешение для всех через Allow from all, а потом указывать через Deny from IP-адреса, либо названия хостов, для которых доступ строго воспрещен.

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

Тег с именем файла
Order Deny,Allow - открытие опции
Deny from all - правило директивы
- закрытие тега

Теперь вам осталось поместить htaccess в каталог, где содержится файл passvd.txt, и никто не сможет добраться к нему через сайт. Как показывает практика, обычно доступ к файлу блокируют не полностью, а указывают исключения для доверенных IP-адресов. К примеру, вы сможете указать ограничение для всех, кроме своего IP, чтобы вы смогли потом скачать файл с паролями. Вот пример такого ограничения:


Order Deny,Allow
Deny from all
Allow from 144.66.55.2

Если в каталоге содержится не один файл, который вам нужно защитить, а несколько, то вы можете прописать сразу много директив для каждого отдельного объекта. Но это неудобно. Кроме того, много опций в htaccess нагружают сервер, потому куда разумнее активировать другую блокировку — запрет доступа по типу файлов в каталоге, а не по их наименованию. Вам нужно будет использовать точно такую же конструкцию директив, только вместо имени файла необходимо через символ «|» указывать расширения, которые пользователи не смогут скачать с данной папки. Вот пример тег запрета для загрузки картинок определенного формата:


Директивы

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

Учтите, что многие пользователи используют не статический IP, а динамический, потому указывать один адрес в запрете глупо. Куда разумнее писать в запрет диапазон IP-адресов. Для этого найдите Whois-сервис и определите CIDR IP-адреса, а затем укажите его в запрете. Тогда даже при временной смене адреса, пользователь не сможет зайти на портал.

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

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

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

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

Настройки httpd.conf, разрешающие применение файлов.htaccess

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

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

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

AllowOverride All

Примечание

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

Синтаксис.htaccess

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

  • Пути к файлам и директориям должны указываться от корня сервера, например, /pub/home/server1/html/

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

  • В именах доменов обязательно должны быть указаны протоколы, например:

Примеры использования.htaccess

Глобальное перенаправление (редирект) на другой адрес:

Redirect / http://www.newsite.ru

Перенаправление (редирект) только при запросе определенных страниц:

Redirect /company http://www.newsite.com/newcompany
redirect /forum http://www.newsite.com/newforum

При запросе страниц из каталогов company и forum будет произведено перенаправление на новые адреса.

Перенаправление (редирект) только посетителей с определенным IP-адресом:

SetEnvIf REMOTE_ADDR 192.145.121.1 REDIR="redir"
RewriteCond %{REDIR} redir
RewriteRule ^/$ /only_for_you.html

Если посетитель имеет IP-адрес 192.145.121.1, то ему будет открыта страница only_for_you.html.

Изменение названия индексной страницы:

DirectoryIndex index.html index.php index.shtml

Можно указать несколько индексных страниц. При запросе каталога они будут искаться в том порядке, в котором перечислены в директиве DirectoryIndex. Если не будет найден файл index.html, то будет произведен поиск файла index.php и т.д.

Выполнять код PHP в файлах HTML

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

Добавив эти строки в.htaccess вы дадите директиву серверу выполнять инструкции PHP не только в файлах с расширением *.php и *.phtml, но и в файлах с расширением *.htm и *.html.

Обработка ошибок Apache

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

При возникновении этих ошибок посетитель будет перенаправлен на специально созданные страницы.

  • 401 ошибка - Требуется авторизация (Authorization Required).
  • 403 ошибка - пользователь не прошел аутентификацию, доступ запрещен (Forbided).
  • 404 ошибка - Документ не найден (Not Found).
  • 500 ошибка - Внутренняя ошибка сервера (Internal Server Error).

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

Options –Indexes

Определение кодировки, в которой сервер "отдает" файлы

AddDefaultCharset windows-1251

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

CharsetSourceEnc windows-1251

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

Deny from all

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

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

Order deny,allow
deny from all
allow from 195.135.232.70

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



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: