Це правильний спосіб включити 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. Це правильний спосіб це зробити чи мій комп'ютер якось підірветься?


дивіться це. Це може вам допомогти. stackoverflow.com/questions/33062142 / ...
Avnish ALOK

Відповіді:


58

тл; д-р

Так, це правильний шлях.
Але щоб бути більш семантичним : Так, це правильний спосіб дозволити .htaccessпереосмислити всі директиви в /var/wwwкаталозі.


Як ви з’ясували, AllowOverrideце дозволено лише під Directoryрозділом.

Використовуючи свій приклад:

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

Це говорить апаші, що всі конфігурації можуть бути переохолоджені в /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директиви.

Примітка: Станом на Апачі 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.


3
немає файлу з іменем за замовчуванням - але є файл з ім'ям 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>

Хоча це могло і вирішити вашу проблему, воно не пов’язане з питанням, яке має ОП. Директиви порядку і дозволу є директивами в apache2.2 і більш ранніх версіях. Вони використовуються для дозволу / заборони доступу користувачів до певних каталогів. Вони не впливають на те, чи будуть розроблені директиви у файлі .htaccess чи ні.
Dan

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.