Вопрос или проблема
В почти каждом решении вопроса “Как активировать htaccess” говорится, что нужно отредактировать файл /etc/apache2/sites-available/default. Но такого файла нет в Apache 2.4.7
Я где-то прочитал, что новый файл по умолчанию – это 000-default.conf. Я отредактировал его и попытался добавить строку:
AllowOverride All
Но Apache2 не перезагрузился правильно и выдал ошибку. В документации Apache2 я нашел, что AllowOverride разрешено только в секции <Directory>
. Затем я попытался добавить следующее:
<Directory "/var/www">
AllowOverride All
</Directory>
И это, похоже, сработало. Но я не уверен, следует ли мне указывать /var/www. Это правильный способ или мой компьютер каким-то образом взорвется?
итог
Да, это правильный способ.
Но если быть более точным: Да, это правильный способ разрешить .htaccess
переопределять все директивы в директории /var/www
.
Как вы выяснили, AllowOverride
разрешено только в секции Directory
.
Используя ваш пример:
<Directory "/var/www">
AllowOverride All
</Directory>
Это говорит Apache, что все конфигурации могут быть переопределены в /var/www
и во всех его подкаталогах (рекурсивно).
Для лучшего примера рассмотрим, что у вас есть следующая конфигурация в вашем виртуальном хосте:
<Directory "/var/www">
AllowOverride All
</Directory>
<Directory "/var/www/uploads">
AllowOverride Limit
</Directory>
И следующая структура директорий:
var/
www/
.htaccess
uploads/
.htaccess
a/
.htaccess
b/
.htaccess
code/
.htaccess
c/
.htaccess
d/
.htaccess
Что я сделал здесь, так это создал .htaccess
в каждом подкаталоге директории /var/www
.
Обычно так не должно быть, но это просто для примера
Сравнивая структуру каталогов с конфигурацией, это означает, что все файлы .htaccess
внутри папки /var/www
и ее подкаталогов, исключая директорию /var/www/uploads
и ее подкаталоги, могут переопределять все виды директив.
Но /var/www/uploads
и его подкаталоги могут использовать файл .htaccess
только для переопределения директив Allow
, Deny
и Order
.
Обратите внимание: Начиная с Apache 2.4 (который доступен по умолчанию в 13.10+) директивы Allow
, Deny
и Order
были заменены на одну директиву, названную Require
.
Сначала активируйте модуль переопределения с помощью этой команды:
sudo a2enmod rewrite
Затем перезагрузите apache2:
sudo service apache2 restart
Затем перейдите в папку sites-available
:
/etc/apache2/sites-available
Отредактируйте файл с именем default
и измените AllowOverride none
на AllowOverride All
. Есть две строки, где нужно внести это изменение.
Это заставит .htaccess
работать на вашем сервере VPS.
Это сработало на VPS с Ubuntu 12.04.5.
В моем случае это работало так:
Мне нужно было добавить следующие строки:
Order allow, deny
Allow from all
Так это выглядит:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
Вот фрагмент о том, как включить htaccess в Apache 2.4, не меняя конфигурацию по умолчанию:
cat <<EOF> /etc/apache2/conf-available/allow-override.conf
<Directory "/var/www">
AllowOverride all
</Directory>
EOF
a2enconf allow-override
service apache2 reload
Распространенная проблема, с которой я столкнулся в этих руководствах, в том, что в
/etc/apache2/sites-available
нет файла default.conf. Я смог найти место, где это изменить, но это был файл apache2.conf здесь
/etc/apache2/apache2.conf
Не совсем уверен, хорошо ли это, но это сработало для меня, и в той среде, в которой я нахожусь, это безопасно.
Для тех, кто использует apache 2.4 и не находит “default”, смотрите в /etc/apache2/apache2.conf и отредактируйте
Directory
AllowOverride All
Directory
Directory /var/www/>
AllowOverride All
Directory
Ответ или решение
Для активации поддержки .htaccess
в Apache 2.4.7 необходимо выполнить несколько ключевых шагов, и ваше понимание данного процесса, как уже упомянуто, верное. Давайте рассмотрим более подробно, как уйти от изменения устаревших файлов конфигурации и адаптироваться к новым методам.
Настройка Apache для работы с .htaccess
-
Поддержка модуля rewrite:
Прежде чем активировать использование файлов
.htaccess
, убедитесь, что модульrewrite
включен. Для этого выполните команду:sudo a2enmod rewrite
После этого перезагрузите Apache:
sudo service apache2 restart
-
Редактирование конфигурационных файлов:
В версии Apache 2.4 конфигурация фактически может располагаться в несколько отличных от предыдущих мест. Хотя многие руководства рекомендуют исправлять файл
default
, в вашем случае, скорее всего, вам следует редактироватьapache2.conf
, который располагается в:/etc/apache2/apache2.conf
Чтобы разрешить использование файлов
.htaccess
, нужно добавить следующие строки в секцию<Directory>
:<Directory "/var/www"> AllowOverride All </Directory>
Это говорит Apache, что внутри каталога
/var/www
и всех его подкаталогов разрешены изменения, которые могут быть прописаны в.htaccess
. -
Проверка конфигурации:
После внесения изменений в конфигурацию не забудьте проверить синтаксис конфигурационных файлов Apache с помощью команды:
sudo apachectl configtest
Если ошибок нет, вы можете перезагрузить сервер:
sudo service apache2 restart
Альтернативный подход
Как вы отметили, есть возможность создать отдельный конфигурационный файл конфигурации для применения директивы AllowOverride
, например:
cat <<EOF > /etc/apache2/conf-available/allow-override.conf
<Directory "/var/www">
AllowOverride All
</Directory>
EOF
sudo a2enconf allow-override
sudo service apache2 reload
Пояснение
Использование каталога /var/www
является стандартом для веб-серверов, работающих на базе Apache. Тем не менее, если ваши веб-ресурсы находятся в другом месте, убедитесь, что путь к директории указан правильно.
Обратите внимание, что с версии Apache 2.4 директивы Order
, Allow
, и Deny
были заменены на более простую и интуитивно понятную директиву Require
. Поэтому использование директивы Require all granted
может также быть актуально для вашего случая.
Заключение
Ваш подход к активации функциональности .htaccess
является корректным и безопасным, если вы уверены, что ваш сервер не подвергнется угрозам безопасности, связанным с неправильным использованием .htaccess
. Регулярно выполняйте резервное копирование конфигурационных файлов и тестируйте изменения в контролируемой среде, прежде чем применять их на боевом сервере.