Войти Регистрация

Примеры htaccess: 8 изумительных примеров .htaccess файлов


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

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

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

В дальнейшем, для работы с htaccess файлами локально, вы можете установить локальный сервер (Denwer). При этом htaccess файлы должны быть в корневой директории проекта (сайта). Для редактирования, мы можем использовать любой из текстовых редакторов (Notepad++ вполне подойдет).

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

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

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

А теперь подробнее и с примерами использования этих загадочных .htaccess файлов.

Пример .htaccess редиректа

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

Redirect 301 ^old\.html$  <a href="http://localhost/new.html" target="_blank">http://localhost/new.html</a>

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

Пример .htaccess rewrite

В переводе, rewrite означает – переписать. Мы можем переписывать текущий URL страниц для более простого восприятия, или как говорят в народе: «для создания ЧПУ» (человекопонятных УРЛ). Что сейчас очень распространено. Пример простого использования htaccess rewrite можете посмотреть ниже:

RewriteEngine on

RewriteRule ^old\.html $ new.html

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

В дальнейшем, для отображения обновленной информации в адресной строке посетителя, мы можем использовать модификатор R, в конце правила. Смотрите пример:

RewriteRule ^old\.html$  <a href="http://hostname/new.html" target="_blank">http://hostname/new.html</a> [r=301]

Модификатор r, способствует внешней переадресации, которая возвращает новую страницу. Таким образом, мы можем определить код статута (HTTP ответ). Этот пример кода обновляет информацию в адресной строке браузера.

Еще одно полезное применение для htaccess rewrite, которое упоминалось ранее, это создание ЧПУ. Давайте посмотрим на примере:

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

Это правило позволит пользователям увидеть URL подобным образом: products/turntables/technics/sl1210, а перенаправить на product.php?cat=turntables&<WBR>brand=technics&prod=sl1210, без изменения данных в адресной строке. Это очень удобно как для SEO, так и для пользователей. Текст между слешами, это регулярные выражения, которые позволяют отобразить только значения $1,$2,$3, между которыми слеши. Выражение [^/]+ означает, что может встречаться любой из символов 1 или больше раз, за исключением слеша (/).

На практике, url rewrite используют более сложным образом. Этой теме посвящено множество статей и уроков, мы не будем на этом останавливаться.

Создание собственной 404 страницы

Это не совсем хорошо, отображать стандартную страницу ошибки 404. Много сайтов, подходят творчески, с юмором к своей 404 странице (которая выводиться при невозможности найти соответственного документа в директориях сайта). Вы также можете создать собственную 404 страницу.

Очень просто, использовать .htaccess, для указания страницы 404 ошибки. Смотрите на примере:

ErrorDocument 404 ";/404.html";

Это все что нам необходимо для отображения 404 страницы. Мы также можем создать свои страницы для других ошибок сервера.

Запрещение доступа к определенным ресурсам

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

AuthName ";Username and password required";

AuthUserFile /path/to/.htpasswd

Require valid-user

AuthType Basic

Этот файл нужно сохранить и поместить в директорию, которую мы хотим защитить. Указание AuthName, выводит сообщение с блоков ввода логина и пароля. AuthUserFile это указание пути к файлу .htpasswd. Указание Require, определяет, что только авторизованные пользователи имеют доступ к защищенным файлам, в то время как AuthType установлено на Basic.

Для защиты конкретного файла, мы можем поместить следующий код в директиву <files>, в которой определяются файлы для защиты доступа.

Files ";protectedfile.html";>

AuthName ";Username and password required";

AuthUserFile /path/to/.htpasswd

Require valid-user

AuthType Basic

</Files>

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

Блокирование доступа отдельных IP, user-agent

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

order allow,deny

deny from 192.168.0.1

allow from all

Директива order, сообщает серверу, в какой последовательности выполнять директивы allow/deny. В этом случае, директива allow будет выполнятся первой, потом deny. Указание allow from all выполняется первым (хотя и стоит в коде после deny), оно позволяет всем IP адресам иметь доступ к содержимому. После этого вступает в силу директива deny, которая запрещает доступ определенным IP. Таким образом имеют доступ все, кроме указанных IP адресов. Следует отметить, что мы можем запрещать доступ используя короткие IP адреса, например 192.168.

Для запрещения запросов отдельных user-agent, нам следует сделать следующее:

RewriteCond %{HTTP_USER_AGENT} ^OrangeSpider

RewriteRule ^(.*)$ http://%{REMOTE_ADDR}/$ [r=301,l]

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

Пример .htaccess кэширования

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

Кэширование очень простое в настройках и позволяет вашему сайту загружаться быстрее.

Если вы проверите свой сайт через Google PageSpeed, то получите сообщение об установках сроков кэширования (far-future expiry headers). Это делается следующим образом:

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, просто убеждается в том, что генерация Expires headers доступна. Доступность определяется наличием установленного модуля mod_expires на сервер Apache.

Пример сжатия на .htaccess

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

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, который основан на указании content-type. В этом случае мы определяем text/html, text/css и text/javascript.

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

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

SetOutputFilter DEFLATE

AddOutputFilterByType DEFLATE text/html text/css text/javascript

В этом случае мы устанавливаем алгоритм сжатия с помощью директивы SetOutputFilter, и определяем типы контента, которые мы хотим сжать используя директиву AddOutputFilterByType

Как правило, ваш веб сервер использует один из этих модулей, в зависимости от версии Apache. В основном, если вы разрабатываете свой проект, вы знаете, какой код следует использовать. Но если вы разрабатываете продукт, и не знаете, на каком сервере он будет использован, вам следует использовать оба кода сразу. Для этого оба кода необходимо взять в директиву <IfModule module_name>, это определит, какой из этих модулей используется, и сервер не возвратит 500 ошибок о попытке настройки модуля, которого не существует.

Заключение

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


Дальше: MiraLinks - как зарабатывать, отзывы о миралинкс, цены в miralinks


Дискуссия по теме     8 Комментариев
Добавить комментарий
progman 06.03.2017 ? 15:03
Добавил ... Сайт вообще накрылся Internal Error 500 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";
Евгений 21.10.2015 в 12:36
А можно ли закешировать файлы только из определенной папки?
Аркадий 29.01.2015 в 04:10
Спасибо! Полезно. Однако когда попробовал поставить в .htacctss вот это: 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"; Сайт перестал отображаться. Я не знаю, есть ли на хостинге упомянутый модуль mod_expires, возможно, в этом причина? Мой сайт безо всяких модулей, на одном HTML
FineGO 18.09.2014 в 10:23
Ещё дополнение к полезностям: #Выключение опций CGI скрипты..... и т.д Options All -ExecCGI -Indexes -Includes FollowSymLinks #устанавливает часовой пояс, подпись сервера <IfModule mod_setenvif.c> SetEnv TZ Europe/Moscow </IfModule> ServerSignature Off #ограничить загрузки файлов до 10mb LimitRequestBody 10240000 более подробно можно ознакомиться здесь: http://finego.ru/article
Любовь 10.04.2012 в 23:40
Благодарю Вас, утром буду разбираться.
Любовь 10.04.2012 в 17:08
Если у автора найдется время и желание ответить на мой вопрос (или дать ссылку), буду очень признательна. (Много уже искала и читала, но конкретно для своего случая не нашла. Я не профессионал, может, что-то очевидное не совсем поняла.) Как запретить браузеру и прокси кэширование некоторой директории сайта, например, /list/, с файлами формата xls, которые обновляются периодически, но период обновления может быть разным. Сайт - без системы управления сайтом, на php html, какие настройки нужны в этом случае.
Тарас 10.04.2012 в 23:33
Есть и время и желание ))) вот пожалуйста http://aione.ru/zapretit-keshirovanie-ili-razreshit-v-php-ili-apache/ Насколько я понял, сначала нужно убедиться что включены модули, которые отвечают за кэширование. После этого вам нужно будет создать файл .htaccess и поместить его в папку /list/ В этом .htaccess файле вставить необходимые строки, которые ставят запрет на кэширование содержимой папки. Запрет будет действовать на ту папку, в которой лежит .htaccess файл, тоесть это ваша /list/ Надеюсь все получится! Удачи )))
Роман 12.02.2012 в 13:23
Отличная статья.
Добавить комментарий
Просмотров: 454069