Htaccess - Применение и синтаксис. htaccess примеры

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

Это достаточно удобно в случае, когда Вам необходимо переопределить управляющие директивы WEB-сервера для конкретного каталога или сайта (если на WEB-сервере несколько сайтов) и не хочется менять установки для всех остальных. А так же в случаях, когда у Вас нет доступа к файлу httpd.conf.

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

Допустимые директивы в.htaccess

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

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

Redirect / http://www.test-page.ru

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

Redirect / http://www.test-page.ru

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

Redirect /data http://test-page.com/data
redirect /forum http://test-page.com/forum

При запросе страниц из каталогов data и forum будет произведено перенаправление на новые адреса.
Перенаправление всех запросов кроме.gif и.jpg:

RewriteEngine On
RewriteRule !.(gif|jpg)$ index.php

Все запросы кроме запросов к файлам с расширениями.gif и.jpg будут перенаправлены на файл index.php

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

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

Если посетитель имеет IP-адрес 192.168.11.1, то ему будет открыта страница data.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. Также можно добавить туда любые другие расширения файлов, к примеру.code или.kot, такие хитрости иногда могут сбить с толку хакера, который пытается взломать ваши скрипты.

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

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

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

403 ошибка - пользователь не прошел аутентификацию, доступ запрещен (Forbided).

404 ошибка - Документ не найден (Not Found).

500 ошибка - Внутренняя ошибка сервера (Internal Server Error).

Запрет на отображение содержимого каталога (если в папке нет index.php или index.html)

Options -Indexes

Определение кодировки , в которой сервер посылает страницы пользователю

AddDefaultCharset utf-8

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

CharsetSourceEnc windows-1251
или
CharsetSourceEnc utf-8

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

deny from all

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

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

order deny,allow
deny from all
allow from 192.168.11.1

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

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

deny from 192.168.11.1

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


deny from all

Запрещен доступ посетителей к файлам config.php . Этот запрет не действует на скрипты web-сервера. Они по прежнему будут иметь доступ к этому файлу.

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


deny from all

Здесь запрещен доступ к файлам с расширением *.ini. Директива, при указании имени файлов, позволяет использовать подстановочные символы.

Любой одиночный символ

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

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


deny from all

Запрещен доступ к файлам с расширением *.inc, *.conf, *.cfg, *.pass. Хотя директива, по умолчанию, не работает с регулярными выражениями, но их можно включить, поставив символ тильды (~) в опциях директивы. Синтаксис следующий:

Установка пароля на директорию

AuthName "Admin page"
AuthType Basic
AuthUserFile /pub/home/server/.pass
require valid-user

Набирая адрес в строке браузера, вы получаете на свой компьютер файлы, которые отображает браузер. Управление тем, какие файлы и как вам показывать (пересылать) осуществляет веб-сервер . Наиболее популярных серверов два: IIS и .

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

Это файл гибкой настройки веб-сервера Апач. «Гибкий» обозначает, что как только вы поменяли что-то в этом файле, изменения тут же вступают в силу. С помощью него можно переопределить многие директивы из файла httpd.conf (этот файл является главным конфигурационным файлом сервера Апач и его действия распространяются полностью на всех пользователей данной копии Апача). В случаях, когда у вас нет доступа в файлу настройки Апача (тот же виртуальный хостинг), вам поможет именно этот файл.

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

Структура ваших директорий на сервере такая:

|-user | | | -user1 | | | -user2 | |-data | | | -data1 | | | -data2 |

Директории user1 и user2 будут вложенными по отношению к директории user . Если мы поместим в директорию www файл.htaccess , то его действие будет автоматически распространяться и на директории user1 и user2 .

В директорию data помещаем другой файл.htaccess , по-сравнению, с тем, что находится в директории user . И для директорий data1 и data2 будет действовать файл.htacсess, находящийся в data.

165

Htaccess - Применение и синтаксис

Ваша оценка: шедевр замечательно очень хорошо хорошо нормально Не читал терпимо посредственно плохо очень плохо не читать

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

Файл действует на текущую директорию (где он лежит) и на все директории "ниже", т.е. все дочерние директории, если только в них не определен свой файл.htaccess.

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

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

Директивы файла указываются по одной на строку.

Все пути начинаются от корня сайта (не от корня файловой системы сервера!)

Например, если нужный файл на сервере лежит по пути /var/www/mysite.ru/mydir/file.html, то правильным будет путь /mydir/file.html

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

Например, если идет перенаправление на сайт www.mysite.ru, то указывать необходимо http://www.mysite.ru

Коментарии - все, что находится после символа #

В выражениях можно использовать переменные окружения. Список наиболее часто используемых - ниже.

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

Переменные окружения

Хотя и не часто, но все-же в файле.htaccess могут использоваться переменные окружения. Некоторые из них приведены ниже (спасибо сайту htaccess.net.ru):

  • QUERY_STRING (параметры запроса)
  • REMOTE_ADDR (IP-адрес посетителя)
  • REMOTE_HOST (имя хоста посетителя)
  • REMOTE_USER (имя пользователя, если он прошел аутентификацию)
  • REMOTE_METHOD (метод браузера - GET или POST)
  • PATH_INFO (путь к файлу веб-страницы)
  • HTTP_USER_AGENT (содержимое заголовка user-agent - тип браузера)
  • HTTP_REFERER (содержимое заголовка referer)
  • HTTP_COOKIE (содержимое заголовка cookie)
  • HTTP_HOST (имя хоста веб-сайта)
  • TIME_YEAR (год, месяц и т.д.)
  • TIME_MONTH
  • TIME_DAY
  • TIME_HOUR
  • TIME_MIN
  • TIME_SEC
  • TIME_WDAY
  • REQUEST_URI (запрашиваемый URL)
  • REQUEST_FILENAME (запрашиваемый файл)
  • THE_REQUEST (полностью запрос)

Регулярные выражения в.htaccess

В этом файле можно использовать регулярные выражения. Их синтаксис приведен ниже. Спасибо сайту htaccess.net.ru

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

  • Круглые скобки () используются для выделения групп символов.
  • Символ ^ обозначает начало строки.
  • Символ $ обозначает конец строки.
  • Символ. обозначает любой символ.
  • Символ | обозначает альтернативу. Например, выражения "A|B" и "(ABC|DEF)" означают "A или B" и "ABC или DEF" соответственно.
  • Символ? ставится после символа (или группы символов), который может как присутствовать, так и отсутствовать. Например, выражению "jpe?g" подойдет и строка "jpg", и строка "jpeg". Пример выражения с группой символов: "super-(puper-)?site".
  • Символ * ставится после символа (или группы символов), который может отсутствовать или присутствовать неограниченное число раз подряд. Например, выражению "jpe*g" подойдут строки "jpg", "jpeg" и "jpeeeeeeg".
  • Символ + действует аналогично символу * с той лишь разницей, что предшествующий ему символ обязательно должен присутствовать хотя бы один раз. Например, выражению "jpe+g" подойдут строки "jpeg" и "jpeeeeg", но не "jpg".
  • Квадратные скобки используются для перечисления допустимых символов. Например, выражение "" равносильно выражению "a|b|c", но вариант с квадратными скобками обычно является более оптимальным по быстродействию. Внутри скобок можно использовать диапазоны: например, выражение "" равносильно выражению "". Если символы внутри квадратных скобок начинаются с символа ^, это означает любой символ, кроме перечисленных в скобках. Например, выражение "[^0-9]+" означает строку из любых символов, кроме цифр.
  • Символ \ ставится перед спецсимволами, если они нужны в своем первозданном виде. Например, выражению "jpe\+g" соответствует только одна строка "jpe+g".
  • Все, что расположено правее # - считается комментарием.

Как включить

В Linux (LAMP) в конфигурации Apache использование файла.htaccess, как правило, уже разрешено. Во FreeBSD может потребоваться особо разрешить использование этого файла директивой AllowOverride в глобальной конфигурации или в конфигурации конкретного сайта.

AllowOverride All

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

Доступ с определенного IP адреса

oder deny,allow
deny from all
allow from 192.168.0.1
allow from 192.168.0.2


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

Запрет на доступ с определенных IP адресов

order allow,deny
allow from all
deny from 192.168.0.1
deny from 192.168.0.2


Где вместо указанных IP необходимо указывать те, доступ с которых закрыт.

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


order allow,deny
deny from all


Вместо ext1, ext2, ext3... вставляем свои расширения. Правила запрета/доступа определяются так-же, как и для всей директории в целом.

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


order allow,deny
deny from all

Паролирование директории

Часто используется при создании веб-сайтов, доступ к которым (или к части которых) разрешен не всем. При попытке открытия этого url веб-браузер запросит у пользователя логин и пароль.

AuthName "Введите пароль для доступа"
AuthType Basic
AuthUserFile /var/www/mysite.ru/.htpasswd
require valid-user


ВНИМАНИЕ! Заметьте, что здесь путь к файлу.htpasswd указывается от корня файловой системы сервера, не сайта!

Для использования данного способа следует иметь файл.htpasswd. Как его создать и пользовать - рассказано на этом же сайте в разделе веб. Приведем пример создания этого файла:

# htpasswd -c /var/www/mysite.ru/.htpasswd username password


Если ключ -c не указывать - утилита htpasswd не создаст файл заново, а добавить пользователя username к уже существующим.

Следует учесть, что при данном способе аутентификации логин и пароль передаются в открытом текстовом виде, потому рекомендуется использовать протокол HTTPS/SSL.

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

Сложное паролирование

Есть структура сайта:

/mysite.ru/A
/mysite.ru/A/B1
/mysite.ru/A/B2

Необходимо сделать так, чтобы аутентификация проводилась только при доступе к директории A всех пользователей, но при этом к директории B1 имели доступ одни пользователи, а к директории B2 - другие.

Нам понадобятся файлы.htaccess в каждой директории.

Htaccess для директории A:

AuthName "Введите пароль"
AuthType Basic


require valid-user


.htaccess для директории B1:

AuthName "Введите пароль"
AuthType Basic
AuthUserFile /var/www/mysite.ru/A/.htpasswd

require user username1 username2 username3


.htaccess для директории B2:

AuthName "Введите пароль"
AuthType Basic
AuthUserFile /var/www/mysite.ru/A/.htpasswd

require user username1 username4 username5


Вместо usernameX подставляем имена пользователей, которые имеют доступ к соответствующим директориям.

Перенаправление (редирект) на другой сайт

Redirect / http://www.anothersite.ru


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

Redirect permanent / http://www.anothersite.ru


Если вместо permanent использовать слово temp - редирект будет, наоборот, временным.

Еще пример редиректа - с конкретной директории внутри сайта:

Redirect /dir2 http://www.anothersite.ru/dir2

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

RedirectMatch (.*)\.gif$ http://mysite.ru/$1.png


Редиректит все обращения к.gif - на такие же по имени файлы, но с расширением.png, находящиеся по адресу mysite.ru/

Еще пример:

RedirectMatch (.*\.jpg)$ http://mysite/$1

RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.old_site\.ru$

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

Показ разных страниц в зависимости от IP-адреса пользователя

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


Вместо 192.168.0.1 вставляем свое значение.

Подмена стартовой страницы

DirectoryIndex another_file.php


По-сути, здесь мы подменяем указываемую в httpd.conf или apache.conf файле директиву DirectoryIndex.

Замещение страниц ошибок

ErrorDocument 403 /error403.html
ErrorDocument 404 /error404.html


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

Сделать запрет отображения списка файлов в директориях без index-файла

Options -Indexes


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

Указывание отображаемой кодировки

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

AddDefaultCharset windows-1251

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

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

CharsetSourceEnc koi8-r

Добавление обработчиков MIME

AddType "text/html" .myext
AddType "application/x-rar-compressed" .rar


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

Блокировка определенных User-Agent (веб-браузеров, ботов и роботов)

Вот кусок файла.htaccess, в котором заблокированы несколько User-Agent (веб-браузеров; ботов, на самом то деле).

SetEnvIfNoCase User-Agent "^Titan" bad_bot
SetEnvIfNoCase User-Agent "^Wget" bad_bot
SetEnvIfNoCase User-Agent "^SiteSnagger" bad_bot
SetEnvIfNoCase User-Agent "^WebAuto" bad_bot
SetEnvIfNoCase User-Agent "^NetAnts" bad_bot
SetEnvIfNoCase User-Agent "^WebZip/4.0" bad_bot
SetEnvIfNoCase User-Agent "^httplib" bad_bot


Order Allow,Deny
Allow from all
Deny from env=bad_bot


Список "плохих" User-Agent здесь очень мал и приведен только как пример.

Настройки PHP

Помимо переменных httpd.conf и apache.conf нам также может пригодиться изменение заданных в php.ini значений настроек php. .htaccess файл позволяет сделать и такие приятные вещи. Для этого используется директивы php_value и php_flag.

Разница между php_value и php_flag: первая директива присвает конкретное значение настройке:
php_value
а вторая - включает или выключает boolean-настройку:
php_flag

ВНИМАНИЕ! Вы не можете использовать php_admin_flag и php_admin_value в файле.htaccess!

Например, код

php_flag magic_quotes_gpc 0
php_flag magic_quotes_runtime 0


выключит автоматическое экранирование данных в PHP (выключит MagicQuotes), а код

php_value memory_limit 64M

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

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

Модуль Rewrite

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

Актуально для: Apache 2.x

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

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



Просмотров