Это правильный способ включить htaccess в Apache 2.4.7?

Это правильный способ включить htaccess в Apache 2.4.7?

Почти в каждом решении "Как активировать 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

Не уверен, что это хорошая идея, но мне она помогла, и в той среде, в которой я нахожусь, это безопасно.

Связанный контент