Если кратко то для того, что бы работал .htaccess
необходимо в /etc/apache2/sites-available/default
(или другом файле вашей конфигурации сайта в этой же директории) изменить значение директивы AllowOverride None
на All
в директориях в которых должен работать файл .htaccess и что важно во всех вложенных тоже. Так же в основном файле конфигурации сервера Apache расположенного по адресу /etc/apache2/apache2.conf
должна быть запись AccessFileName .htaccess
. Так же возможно может понадобится команда $ sudo a2enmod rewrite
для разрешения модуля mod_rewrite
. После перезагрузки сервера файл .htaccess
готов к работе.
Теперь немного дольше. Сразу приступим к делу ведь мы знаем зачем мы тут. Не работает файл конфигурации сервера Apache под названием .htaccess и это надо исправлять. Это весьма не сложно но в начале надо точно понять, что именно .htaccess не работает а не, что-нибудь другое. Для этого можно к примеру дописать туда такие директивы:
AuthType Basic AuthName admin require valid-user
Эти настройки говорят серверу, что пользователю необходимо проходить базовую аутентификацию на уровне протокола http на самом сервере. Т.о. в браузере должно появиться окно ввода данных: имя пользователя и пароля. Конечно для такой защиты этот код не полный, но для проверки работы файла .htaccess этого вполне достаточно. Если после обновления страницы такое окно не появилось, значит файл дополнительной конфигурации веб сервера не работает, точнее сервер его не учитывает.
Так же проверить работу можно при помощи добавления директивы Options +Indexes
во всё тот же файл htaccess. Эта директива разрешает отображать файлы каталога в виде обычной иерархии документов как это сделано в файловой системе Microsoft Windows.
Ну да хватит проверок и давайте перейдем к решению этой задачи. Сразу стоит сказать, что для решения у вас должен быть доступ к настройкам конфигурации виртуальных хостов web сервера Apache. Если же у вас хостинг предоставляет хостинг провайдер и тариф ваш «виртуальный хостинг», то с такой проблемой придётся обращаться прямиком в службу поддержки. Но продолжим. Всё дело в том, что сам файл .htaccess (в расшифровке hypertext access) это дополнительной локальной для каждого каталога файл конфигурации веб-сервера Apache, а также подобных ему серверов. Он позволяет задавать большое количество локальных дополнительных перекрывающих параметров и разрешений для работы веб-сервера в отдельных каталогах (директориях), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла сервера.
Файл .htaccess является подобием httpd.conf с той разницей, что действует только на каталог, в котором расположен, и на его производные директории. Возможность использования этого файла в том или ином каталоге конкретно указывается в httpd.conf (директива AllowOverride). Поскольку файл конфигурации веб сервера httpd.conf с некоторых пор является устаревшим, на замену ему пришёл файл apache2.conf. Для Unix ОС, например для Ubuntu новый файл конфигурации веб сервера расположен по умолчанию тут /etc/apache2/apache2.conf, там же может находится и старый файл httpd.conf, но он, как правило, пустой и оставлен для обратной совместимости. В этом новом файле в основном расположены глобальный настройки web сервера, а таки директивы как AllowOverride располагаются в файлах конфигураций каждого конкретного виртуального хоста (сайта). Настройки для сайтов расположены в директории /etc/apache2/sites-available
. По умолчанию там находится только один файл default для одного виртуального хоста сервера. Туда надо добавлять новые файлы для новых хостов. Для наглядности лучше создавать эти файлы из начального default. Так вот в этих файлах и хранятся все настройки для каждого сайта. Там же в секции настроек директории и указывается директива AllowOverride
, значение которой может быть None и для работы файлов .htaccess эту директиву надо поставить в положение All, вот так: AllowOverride All
. Эта директива говорит разрешается ли перегружать настройки веб сервера локальными настройками директорий в файлах .htaccess или нет. Так же в основном файле конфигурации сервера (его адрес /etc/apache2/apache2.conf
) должна быть актива такая директива AccessFileName .htaccess
После этого ваши файлы .htaccess должны будут заработать т.к. сервер перестанет их игнорировать.