
Почти в каждом решении "Как активировать 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. Это правильный способ сделать это или мой компьютер каким-то образом взорвется?
решение1
вкратце
Да, это правильный путь.
Но чтобы быть болеесемантический: Да, это правильный способ разрешить .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
.
решение2
Сначала включите перезапись с помощью этой команды:
sudo a2enmod rewrite
Затем перезапустите apache2:
sudo service apache2 restart
Затем заходим в sites-available
папку:
/etc/apache2/sites-available
Отредактируйте файл с именем default
и измените AllowOverride none
на AllowOverride All
. Есть две строки, где нужно сделать это изменение.
Это заставит .htaccess
работать ваш сервер VPS.
Это сработало на Ubuntu 12.04.5 VPS.
решение3
В моем случае это сработало так:
мне пришлось добавить следующие строки:
Order allow, deny
Allow from all
Итак, это выглядит так:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
решение4
Распространенная проблема, с которой я столкнулся в этих руководствах, заключается в том, что в них отсутствует файл default.conf.
/etc/apache2/sites-available
Я смог найти место, где можно было это изменить, но это был файл apache2.conf.
/etc/apache2/apache2.conf
Не уверен, что это хорошая идея, но мне она помогла, и в той среде, в которой я нахожусь, это безопасно.