Ist dies ein korrekter Weg, um htaccess in Apache 2.4.7 zu aktivieren?


46

In fast jeder Lösung von "So aktivieren Sie htaccess" heißt es, dass die Datei / etc / apache2 / sites-available / default bearbeitet werden muss. Aber es gibt keine solche Datei in Apache 2.4.7

Ich habe irgendwo gelesen, dass die neue Standarddatei 000-default.conf ist. Also habe ich diesen bearbeitet und versucht, die Zeile hinzuzufügen:

AllowOverride All

Aber Apache2 wurde nicht richtig neu gestartet und gab einen Fehler. Aus einer Apache2-Dokumentation habe ich herausgefunden, dass AllowOverride nur unter dem <Directory>Abschnitt zulässig ist . Dann habe ich versucht, dies hinzuzufügen:

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

Und das scheint zu funktionieren. Ich bin mir aber nicht sicher, ob ich / var / www hätte dort ablegen sollen. Ist es eine korrekte Vorgehensweise oder wird mein Computer irgendwie in die Luft gehen?


Sieh dir das an. Es könnte dir helfen. stackoverflow.com/questions/33062142/…
Am

Antworten:


58

tl; dr

Ja, es ist der richtige Weg.
Aber um semantischer zu sein : Ja, es ist die richtige Möglichkeit, .htaccessalle Anweisungen im /var/wwwVerzeichnis außer Kraft zu setzen .


Wie Sie herausgefunden haben, AllowOverrideist nur unter dem DirectoryAbschnitt erlaubt .

Verwenden Sie Ihr Beispiel:

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

Dies sagt Apache, dass alle Konfigurationen in den /var/wwwund all ihren Unterverzeichnissen (rekursiv) überschrieben werden können .


Angenommen, Sie haben die folgende Konfiguration in Ihrem virtuellen Host, um ein besseres Beispiel zu erhalten:

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

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

Und die folgende Verzeichnisstruktur:

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

Was ich hier gemacht habe, ist .htaccessin jedem Unterverzeichnis des Verzeichnisses ein anzulegen /var/www.
Es sollte normalerweise nicht so sein, aber dies ist nur zum Zwecke des Beispiels

Wenn Sie die Verzeichnisstruktur mit der Konfiguration vergleichen, bedeutet dies, dass alle .htaccessDateien im /var/wwwOrdner und seinen Unterverzeichnissen mit Ausnahme des /var/www/uploadsVerzeichnisses und seiner Unterverzeichnisse alle Arten von Anweisungen überschreiben können.

Aber /var/www/uploadsund seine Unterverzeichnisse können nur die Verwendung .htaccessDatei , die die zu überschreiben Allow, Denyund OrderRichtlinien.

Hinweis: Ab Apache 2.4 (standardmäßig in 13.10+ verfügbar ist) die Allow, Denyund OrderRichtlinien wurden durch eine einzige Richtlinie genannt ersetzt Require.


39

Aktivieren Sie zuerst das Neuschreiben mit dem folgenden Befehl:

sudo a2enmod rewrite

Dann starte apache2 neu:

sudo service apache2 restart

Dann gehe in den sites-availableOrdner:

/etc/apache2/sites-available

Bearbeiten Sie die Datei mit dem Namen defaultund wechseln Sie AllowOverride nonezu AllowOverride All. Es gibt zwei Zeilen, in denen diese Änderung vorgenommen werden muss.

Dadurch wird die .htaccessArbeit in Ihrem Server VPS.

Dies funktionierte auf einem Ubuntu 12.04.5 VPS.


3
gibt es keine Datei standardmäßig den Namen - aber es gibt eine Datei mit dem Namen 000-default.conf
Tahir Yasin

1
+1 für das Erinnern, um das Neuschreiben zu ermöglichen, fehlte mir dies und ich konnte nicht herausfinden, warum es nicht funktioniert, nachdem ich all die Sachen gemacht hatte.
Abdul Mannan

Dieser Kommentar bezieht sich auf die Konfiguration von Apache 2.2, nicht 2.4. In 2.4 wird die defaultDatei aufgerufen 000-default.confund enthält keine AllowOverride NoneZeile.
ben_nuttall

Die Datei ist 000-default.confund es ist nicht möglich, AllowOverride Nonehier hinzuzufügen , wenn Sie Apache neu laden geben Fehler
Kreker

Wenn Sie nur zulassen müssen, dass mod_rewrite-Direktiven überschrieben werden .htaccess, ist es besser, sie zu verwenden AllowOverride FileInfo. Obwohl FileInfo bereits viele Direktiven enthält, würden Sie dennoch viele Direktiven daran hindern, überschrieben zu werden.
Dan

3

In meinem Fall hat es so funktioniert:
Ich musste die folgenden Zeilen hinzufügen:

Order allow, deny
Allow from all

So sieht es also aus:

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

Obwohl dies Ihr Problem behoben haben mag, hängt es nicht mit der Frage des OP zusammen. Die Anweisungen order und allow sind Anweisungen in apache2.2 und früheren Versionen. Sie werden verwendet, um Benutzern den Zugriff auf bestimmte Verzeichnisse zu erlauben / zu verweigern. Sie haben keinen Einfluss darauf, ob die Anweisungen in einer .htaccess-Datei analysiert werden oder nicht.
Dan

2

Hier ein Ausschnitt, wie Sie htaccess in Apache 2.4 aktivieren können, ohne die Standardkonfiguration zu ändern:

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

a2enconf allow-override
service apache2 reload
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.