Это правильный способ включить 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.

Это сработало на 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

  1. Поддержка модуля rewrite:

    Прежде чем активировать использование файлов .htaccess, убедитесь, что модуль rewrite включен. Для этого выполните команду:

    sudo a2enmod rewrite

    После этого перезагрузите Apache:

    sudo service apache2 restart
  2. Редактирование конфигурационных файлов:

    В версии Apache 2.4 конфигурация фактически может располагаться в несколько отличных от предыдущих мест. Хотя многие руководства рекомендуют исправлять файл default, в вашем случае, скорее всего, вам следует редактировать apache2.conf, который располагается в:

    /etc/apache2/apache2.conf

    Чтобы разрешить использование файлов .htaccess, нужно добавить следующие строки в секцию <Directory>:

    <Directory "/var/www">
       AllowOverride All
    </Directory>

    Это говорит Apache, что внутри каталога /var/www и всех его подкаталогов разрешены изменения, которые могут быть прописаны в .htaccess.

  3. Проверка конфигурации:

    После внесения изменений в конфигурацию не забудьте проверить синтаксис конфигурационных файлов 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. Регулярно выполняйте резервное копирование конфигурационных файлов и тестируйте изменения в контролируемой среде, прежде чем применять их на боевом сервере.

Оцените материал
Добавить комментарий

Капча загружается...