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

46

Почти в каждом решении «Как активировать 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. Это правильный способ или мой компьютер как-нибудь взорвется?

CluelessNoob
источник
посмотри это. Это может помочь вам. stackoverflow.com/questions/33062142/…
Avnish alok

Ответы:

58

ТЛ; др

Да, это правильный путь.
Но для большей семантики : да, это правильный способ разрешить .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, Denyand Order.

Примечание. Начиная с версии Apache 2.4 (которая доступна по умолчанию в 13.10+) Allow, директивы , Denyи Orderбыли заменены единственной директивой с именем Require.

Дэн
источник
39

Сначала включите перезапись с помощью этой команды:

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.

q8fft
источник
3
нет файла с именем default - но есть файл с именем 000-default.conf
Тахир Ясин,
1
+1 за напоминание, чтобы включить переписывание, я пропустил это и не мог понять, почему он не работает после выполнения всех вещей.
Абдул Маннан
Этот комментарий относится к конфигурации Apache 2.2, а не 2.4. В версии 2.4 defaultфайл вызывается 000-default.confи не содержит AllowOverride Noneстроки.
ben_nuttall
файл есть 000-default.confи его невозможно добавить AllowOverride Noneсюда, если вы перезагрузите apache и выдадите ошибку
Kreker
Если все, что вам нужно, это разрешить переопределение директив mod_rewrite .htaccess, то его лучше использовать AllowOverride FileInfo. Хотя FileInfo уже включает в себя большой набор директив, вы все равно будете ограничивать переопределение многих директив.
Дан
3

В моем случае это работало так:
мне пришлось добавить следующие строки:

Order allow, deny
Allow from all

Так это выглядит так:

<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>
Профессор Шагас
источник
Хотя это, возможно, решило вашу проблему, это не связано с вопросом, который имеет ОП. Директивы order и allow являются директивами в apache2.2 и более ранних версиях. Они используются, чтобы разрешить / запретить доступ пользователям в определенных каталогах. Они не влияют на то, будут ли проанализированы директивы в файле .htaccess или нет.
Дан
2

Вот фрагмент, как включить 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
panticz.de
источник