- FAQ
SSL-сертификаты
Платежи
Электронная почта
FTP
Базы данных
Резервные копии
Сайты
Настройка файла .htaccess
Настройки файла .htaccess распространяются на файлы в той директории каталога, в которой он находится, и на все директории, которые находятся на уровень или несколько уровней ниже. Если этот файл будет размещен внутри вложенной папки, то его настройки переопределят настройки вышележащего файла.
В файле .htaccess можно задать множество разных параметров и разрешений. Этот файл можно использовать для:
- - создания авторизации и аутентификации (то есть, ограничения доступа к файлам или папкам);
- - установки перенаправлений (например, с бесплатного домена на платный);
- - установки собственной страницы ошибки (вместо страницы ошибки, общей для всех сайтов, размещенных на хостинге);
- - для изменения сложных, длинных URL на короткие и легкозапоминающиеся (ЧПУ);
- - контроля кэширования;
- - настройки других функций.
Для того, чтобы лучше разобраться в .htaccess, рассмотрим, например, файл, который создается по умолчанию для Joomla:
Options +Indexes
- если включена данная опция, то при обращении к папке, в которой нету файла index.html, будет выведет листинг - список файлов, которые находятся в папке. С помощью данной команды можно также исключать из перечня файлов определенные файлы, например:IndexIgnore, .htaccess, .ftpquota, .DS_Store, robots.txt.
- Если включена опция
IndexIgnore
, то все файлы будут проигнорированы и список файлов будет пустым. Options +FollowSymlinks
- данная опция позволяет переходить по ссылкам, но если при ее использовании выводится ошибка сервера, то скорей всего она уже используется в конфигурации сервера, и в данном файле .htaccess ее рекомендуется закоментировать либо удалить.Options -Indexes
- отключает вывод листинга при отсутствии index.html.RewriteEngine On
- включает механизм перенаправления в модуле mod_rewrite.
Дальше следуют настройки безопасности:
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]
Строка параметров закодирована в Base64, содержит тег <script>
и флаг [NC]
в конце второй строки указывает, что проверка выполняется без учета регистра. Строка параметров запроса содержит операцию установки PHP-переменной GLOBALS
через URL, а также содержит операцию установки PHP-переменной $_REQUEST
через URL.
В случае выполнения одного из этих условий, выполняется правило:
RewriteRule .* index.php [F]
Флаг [F] (в переводе от "forbidden" — запрещено) в этом правиле дает инструкцию серверу немедленно отправить ответ с кодом ошибки 403. При этом будет произведено перенаправление на главную страницу сайта index.php, как указано в команде.
Далее начинается блок SEF-оптимизации.
Первая строка устанавливает переменную окружения HTTP_AUTHORIZATION переданными в запросе параметрами HTTP-авторизации.
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Далее идут строки:
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
Рассмотрим по порядку. Первая строка проверяет отсутствие index.php
в строке запроса:
RewriteCond %{REQUEST_URI} !^/index\.php
Следующая строка проверяет, что запрос не указывает на существующий файл:
RewriteCond %{REQUEST_FILENAME} !-f
Следующие строка проверяет, что запрос не указывает на существующую директорию:
RewriteCond %{REQUEST_FILENAME} !-d
Таким образом, правило не будет выполняться, если в запросе указан существующий файл или директория.
Если вышеперечисленные условия выполнены, срабатывает правило в последней строке:
RewriteRule .* index.php [L]
Флаг [L] означает, что это последнее правило.Это правило переадресовывает запрос к скрипту index.php
. То есть, не зависимо от того, что передано в URL, если это не файл и не папка, будет выполнен скрипт index.php
. При этом строка исходного запроса будет доступна скрипту через суперглобальный массив $_SERVER
.
Например, запрос: http:/yoursite.com/news/2015/07/01?prm1=556 фактически выполнит: http:/yoursite.com/index.php
, но в скрипте из $_SERVER
мы можем получить следующее:
$_SERVER['REQUEST_URI'] --> 'news/2015/07/01?prm1=556'
$_SERVER['QUERY_STRING'] --> 'prm1=556'
Внимание: на хостинге ZZZ.com.ua заблокировано использование директив php_flag и php_value. Если они прописаны в файле .htaccess, их нужно удалить либо закоментировать.