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

тл;д-р

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

Это работало на Ubuntu 12.04.5 VPS.

Вот фрагмент, как включить htaccess в Apache 2.4 без изменения конфигурации по умолчанию:

cat <<EOF> /etc/apache2/conf-available/allow-override.conf<Directory "/var/www">    AllowOverride all</Directory>EOFa2enconf allow-overrideservice apache2 reload

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

Order allow, denyAllow from all

Итак, это выглядит следующим образом:

<Directory /var/www/>    Options Indexes FollowSymLinks    AllowOverride All    Order allow,deny    allow from all</Directory>

Распространенная проблема, с которой я столкнулся в этих руководствах, заключается в том, что в

/etc/apache2/sites-available

Я смог найти место, чтобы изменить его, но это был файл apache2.conf здесь

/etc/apache2/apache2.conf

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

Для тех, кто использует apache 2.4 и не находит "default", загляните в /etc/apache2/apache2.conf и отредактируйте

Directory  AllowOverride AllDirectory 

Directory /var/www/>AllowOverride All   Directory

посмотри на это. Это может вам помочь. php - Why codeIgniter show the requested URL was not found on this server? - Stack Overflow

Моя “глобальная конфигурация” находилась в “etc/apache2/apache2.conf”, где я нашел свои объявления “”.