Как настроить фаил .htaccess
Содержание статьи:
- Синтаксис файла htaccess
- Настройка доступа htaccess
- Модификация URL в htaccess
- Настройка редиректов в htaccess
- Настройка страниц ошибок в htaccess
- Кэширование в htaccess
- Сжатие файлов в htaccess
- Закрытие каталогов паролем
- Кодировка
- Версия PHP в нужной папке и изменение обработчика по типу файла
СИНТАКСИС ФАЙЛА HTACCESS
Все директивы из файла htaccess выполняются точно так же, как если бы они были размещены в глобальном конфигурационном файле, только внутри директивы <Directoryадрес_папки_htaccess>. Это не позволяет менять глобальные настройки, но вы можете очень тонко настроить поведение программы в папках, к которым у вас есть права доступа.
Общий синтаксис директив очень прост, это пары команд и их опций, разделенных пробелом, например:
Команда параметр1 параметр2 флаги
Самих команд достаточно много и мы будем рассматривать их на примерах действий, которые они выполняют. Кроме самих команд, тут могут использоваться вложенные структуры, например, для активации модулей или проверки доступности того или иного модуля. А теперь давайте перейдем ближе к тому как выполняется правильная настройка htaccess. Начнем с самых простых действий.
Где искать фаил .htaccess или как его создать.
Зайдите в личный кабинет хостинга, раздел "Сайты", нажмите на сайт и кнопку "Файлы сайта".
Файл уже может быть в списке файлов. Если он есть нажмите "Редактировать" > "Открыть"
Если его нет. Нажмите кнопку "Создать" и создайте фаил с именем ".htaccess". После чего, используя кнопку "Редактировать" > "Открыть", добавьте нужные записи.
Файл .htaccess действует на все папки выше по директориям. Поэтому выше добавлять их в папки не требуется. Если требуется отменить в какой либо папке действие предыдущей записи, просто внесите в нужной папке отменяющую запись.
НАСТРОЙКА ДОСТУПА HTACCESS
Довольно часто htaccess используется для управления доступом к папке. Для управления доступом используются три команды:
- order - порядок;
- deny - запретить;
- allow - разрешить.
Сначала, с помощью опции order, нужно указать в каком порядке будут выполняться директивы, значение имеет только эта команда, и неважно в какой последовательности они расположены в файле.
Затем с помощью директивы allow или deny мы разрешаем или запрещаем доступ к папке с определенных адресов. Например, чтобы запретить все необходимо добавить в htaccess:
Order deny,allow
Deny from all
Но мы также можем разрешить доступ только с нужной подсети или IP адреса:
Order deny,allow
Deny from all
Allow 192.168.0.1
Если указано deny,allow, то проверка будет выполняться в таком порядке. Сначала все директивы deny, затем все директивы allow, и если ни одно из условий не подошло, то запрос пропускается.При allow,deny такой запрос будет по умолчанию отклонен. Например, предыдущий пример можно написать так:
Order allow,deny
Allow 192.168.0.1
МОДИФИКАЦИЯ URL В HTACCESS
Наиболее часто htaccess используется для модификации URL во время выполнения или редиректов. За эту функциональность отвечает модуль mod_rewrite и обычно он активирован в большинстве конфигураций Apache.
Модификация URL в htacces выполняется с помощью трех директив, это RewriteBase, которая указывает префикс адреса, RewriteCond проверяет соответствие, и RewriteRule - изменяет URL в соответствии с регулярным выражением если все правила соответствия подходят.
Сначала нужно включить Mod_Rewrite, на случай если модуль еще не активен:
Укажем, что в качестве префикса для URL нужно использовать корень:
И будем автоматически заменять URL адреса с index.html на index.php, обратите внимание, что исходный URL - это путь к запрашиваемому файлу относительно расположения файла htaccess:
Для более эффективной замены можно использовать регулярные выражения они состоят из специальных символов и переменных и обычных символов и цифр. Рассмотрим основные специальные символы:
- ^ - начало строки;
- $ - конец строки;
- . - любой символ;
- * - любое количество любых символов;
- ? - один определенный символ;
- [0-9] - последовательность символов, например, от 0 до 9;
- | - символ или, выбирается или одна группа, или другая;
- () - иcпользуется для выбора групп символов.
В регулярных выражениях htaccess также можно использовать переменные с данными, полученными из заголовков запроса, например:
- %{HTTP_USER_AGENT} - поле User-Agent, которое передает браузер пользователя;
- %{REMOTE_ADDR} - IP адрес пользователя;
- %{REQUEST_URI} - запрашиваемый URI;
- %{QUERY_STRING} - параметры запроса после знака ?.
Это наиболее часто используемые переменные, но их есть намного больше, остальные вы можете найти в официальной документации. Регулярные выражения открывают более широкие возможности, например, вы можете заменять во всех страницах html на php:
RewriteEngine On;
RewriteBase /;
RewriteRule ^(.*)\.html$ $1.php
Директива RewriteCond дает еще больше гибкости, вы можете выбрать к каким адресам стоит применять модификацию, например, будем переопределять данные только для версии с www:
RewriteBase /;
RewriteCond % {REMOTE_HOST} ^www.site.ru$
RewriteRule ^(.*)\.html$ $1.php
Таким образом, вы можете выполнять любые преобразования ваших URL без фактических редиректов куда-либо. Но дальше мы рассмотрим как делать редиректы.
НАСТРОЙКА РЕДИРЕКТОВ В HTACCESS
Более подробно про редирект для SSL с http на https смотрите тут.
Подробная информация про редиректы тут. Так же вы можете использовать возможности cPanel для более простого управления редиректами.
Настройка редиректов htaccess выполняется похожим образом, с помощью того же самого модуля mod_rewrite, только теперь вместо модификации url мы указываем флаг с нужным действием и кодом редиректа.
Самый простой редирект можно выполнить без mod_rewrite, с помощью такой строки:
Но обычно нужны перенаправления с более широким действием. Все выглядит очень похоже, только теперь мы используем флаг [NC] чтобы не учитывать регистр, [L] для прекращения обработки и [R] - для редиректа. Например, перенаправление htaccess с версии без www на домен с www:
Значение R=301 означает код редиректа, который будет возвращен клиенту, можно использовать 301, 302 и т д. Редирект htaccess с домена www на домен без префикса будет выглядеть так:
Таким же образом можно сделать переадресацию:
RewriteRule ^старый_адрес /новый_адрес/$1 [R=301,L]
Редирект с http версии на https:
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTP} =on
RewriteRule ^(.*)$ https://site.ru/$1 [R=301,L]
или
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Лучший вариант на нашем хостинге
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
НАСТРОЙКА СТРАНИЦ ОШИБОК В 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.
По умолчанию у нас уже для всех клиентов включено кэширование, и вам уже ничего делать не надо. Но вы можете перенастроить под себя.
Сначала активируем модуль и устанавливаем период кэширования по умолчанию:
Теперь мы можем настроить кэширование для каждого mime типа файлов:
В первой строке мы указываем, что страницы 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. Так же вы можете использовать возможности Cpanel, подробно тут.
Здесь достаточно просто перечислить mime типы файлов, которые нужно сжать. Например:
AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
Вы также можете заключить конструкцию if, чтобы проверить поддерживается ли этот модуль:
<ifModule mod_deflate.c>
</ifModule>
Закрытие каталогов паролем
Используйте панель управления хостингом.
Кодировка
Для того, чтобы задать кодировку файла в htaccess достаточно написать в нём всего одну строчку:
AddDefaultCharset UTF-8
Если Вам нужна windows-1251, то тогда так:
DefaultLanguage ru AddDefaultCharset windows-1251 php_value default_charset "cp1251"
по мотивам источника