Czy to poprawny sposób włączenia htaccess w Apache 2.4.7


46

W prawie każdym rozwiązaniu „Jak aktywować htaccess” mówią, że plik / etc / apache2 / sites-available / default wymaga edycji. Ale takiego pliku nie ma w Apache 2.4.7

Czytałem gdzieś, że nowy domyślny plik to 000-default.conf. Więc edytowałem ten i próbowałem dodać wiersz:

AllowOverride All

Ale Apache2 nie uruchomił się ponownie poprawnie i dał błąd. Z dokumentacji apache2 wynika, że ​​AllowOverride jest dozwolony tylko w <Directory>sekcji. Potem próbowałem dodać to:

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

I to wydaje się działać. Ale nie jestem pewien, czy powinienem tam umieścić / var / www. Czy to właściwy sposób, czy mój komputer jakoś wysadzi?


Odpowiedzi:


58

tl; dr

Tak, to właściwy sposób.
Ale aby być bardziej semantycznym : Tak, jest to właściwy sposób, aby zezwolić .htaccessna zastąpienie wszystkich dyrektyw w /var/wwwkatalogu.


Jak się dowiedziałeś, AllowOverridedozwolone jest tylko w Directorysekcji.

Na twoim przykładzie:

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

Mówi to Apache, że wszystkie konfiguracje można przesłonić we /var/wwwwszystkich jego podkatalogach (rekurencyjnie).


Aby uzyskać lepszy przykład, weź pod uwagę, że na wirtualnym hoście masz następującą konfigurację:

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

<Directory "/var/www/uploads">
    AllowOverride Limit
</Directory>

I następująca struktura katalogów:

var/
    www/
        .htaccess
        uploads/
            .htaccess
            a/
                .htaccess
            b/
                .htaccess
        code/
            .htaccess
            c/
                .htaccess
            d/
                .htaccess

To, co tutaj zrobiłem, to utworzenie .htaccessw każdym podkatalogu /var/wwwkatalogu.
Zwykle nie powinno tak być, ale tylko dla przykładu

Porównując strukturę katalogów z konfiguracją, oznacza to, że wszystkie .htaccesspliki w /var/wwwfolderze i jego podkatalogach, z wyjątkiem /var/www/uploadskatalogu i jego podkatalogów, mogą zastępować wszelkiego rodzaju dyrektywy.

Ale /var/www/uploadsi jego podkatalogów mogą używać tylko .htaccessplik, aby zastąpić Allow, Denyi Orderwskazówki.

Uwaga: Od wersji Apache 2.4 (która jest domyślnie dostępna w wersji 13.10+) Allow, dyrektywy Denyi Orderzostały zastąpione jedną dyrektywą o nazwie Require.


39

Najpierw włącz przepisywanie za pomocą tego polecenia:

sudo a2enmod rewrite

Następnie uruchom ponownie Apache2:

sudo service apache2 restart

Następnie przejdź do sites-availablefolderu:

/etc/apache2/sites-available

Edytuj nazwany plik defaulti zmień AllowOverride nonena AllowOverride All. Istnieją dwie linie, w których należy wprowadzić tę zmianę.

To sprawi, że będzie .htaccessdziałać na twoim serwerze VPS.

To działało na Ubuntu 12.04.5 VPS.


3
nie ma pliku o nazwie default - ale istnieje plik o nazwie 000-default.conf
Tahir Yasin

1
+1 za przypomnienie, aby włączyć przepisywanie, brakowało mi tego i nie mogłem zrozumieć, dlaczego nie działa po wykonaniu wszystkich tych czynności.
Abdul Mannan

Ten komentarz dotyczy konfiguracji Apache 2.2, a nie 2.4. W 2.4 defaultplik jest wywoływany 000-default.confi nie zawiera AllowOverride Nonewiersza.
ben_nuttall

plik jest 000-default.confi nie można go AllowOverride Nonetutaj dodać , jeśli przeładujesz apache, podaj błąd
Kreker

Jeśli wszystko, czego potrzebujesz, to zezwolić na zastąpienie dyrektyw mod_rewrite .htaccess, lepiej użyć AllowOverride FileInfo. Chociaż FileInfo zawiera już duży zestaw dyrektyw, nadal ograniczałoby się zastępowanie wielu dyrektyw.
Dan

3

W moim przypadku działało to tak:
musiałem dodać następujące wiersze:

Order allow, deny
Allow from all

Wygląda to tak:

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

Chociaż może to rozwiązać problem, nie ma to związku z pytaniem, jakie ma OP. Dyrektywy kolejności i zezwolenia są dyrektywami w apache2.2 i wcześniejszych. Służą do umożliwienia / odmowy dostępu użytkownikom w niektórych katalogach. Nie mają one wpływu na to, czy dyrektywy w pliku .htaccess zostaną przeanalizowane, czy nie.
Dan

2

Oto fragment, jak włączyć htaccess w Apache 2.4 bez zmiany domyślnej konfiguracji:

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

a2enconf allow-override
service apache2 reload
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.