.htaccess wird ignoriert, obwohl VirtualHost "AllowOverride All" hat

25

Ich verwende einen LAMP-Server unter Fedora 13, der einwandfrei funktioniert. Ich habe jedoch gerade eine ".htaccess" -Datei zum Docroot-Ordner meiner aktuellen Site hinzugefügt, die vollständig ignoriert wird.

Ich habe ein halbes Dutzend verschiedene Tests ausprobiert, darunter diesen:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

Aber Bilder und alle anderen Seiten laden gut, und nicht existierende Dateien noch 404. Ich habe auch Folgendes versucht:

order deny,allow
deny from all

Trotzdem wird jede Seite gut geladen. Auch hier wird die .htaccess-Datei einfach zu 100% ignoriert.

Wir legen unsere virtualhost-Datensätze in /etc/httpd/conf.d/virtual.conf ab. Es sieht aus wie das:

NameVirtualHost *

<VirtualHost *>
    ServerName              intranet
    DocumentRoot            /var/www/default
    <Directory "/var/www/default">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *>
    ServerName              ourwebsite.com
    DocumentRoot            /var/www/html/ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Was könnte sonst dazu führen, dass unser Server die .htaccessDatei komplett ignoriert ?

Bearbeiten:

Ich habe die .htaccess-Datei in oben geändert, um besser zu demonstrieren, dass meine Änderungen ignoriert werden. Beachten Sie, dass ich genau die gleiche .htaccess-Datei auf dem Produktionsserver ausprobiert habe, und es hat gut funktioniert.

Bearbeiten 2:

OK, ich habe neue Informationen! Nur zu Testzwecken habe ich JEDE "AllowOverride" -Richtlinie vorübergehend in geändert AllowOverride All. Ich fand heraus, dass der allererste Verzeichniseintrag alle anderen zu überwältigen scheint:

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

Wenn ich dies in ändere, AllowOverride Allwerden meine .htaccess-Dateien wirksam. Es ist so, als würden alle anderen AllowOverride AllAnweisungen in meinen Konfigurationsdateien ignoriert!

Was gibt??

Brian Lacy
quelle

Antworten:

32

Nicht zu glauben. Erinnern Sie sich, wie ich sagte, dass dies ein Entwicklungsserver ist? Ja ... nun, so sieht mein virtueller Host-Eintrag WIRKLICH aus:

<VirtualHost *>
    ServerName              dev.ourwebsite.com
    DocumentRoot            /var/www/html/dev.ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Siehst du es? Nun, ich habe es nicht getan. ICH HABE VERGESSEN, meinen "Verzeichnis" -Eintrag auf dev.ourwebsite.com anstatt auf ourwebsite.com zu ändern - und das hat den Unterschied ausgemacht. Ich habe nur angenommen, dass Apache einen Fehler ausgelöst hätte, wenn das Verzeichnis nicht existiert hätte. Dies gilt jedoch nur für die DocumentRoot-Direktive. ist spielbasiert - das heißt, es wendet die Regeln an, wenn sie mit der eingehenden Anfrage übereinstimmen. Andernfalls ist es egal, ob Sie AllowOverride auf magischen Einhörnern davon erzählen.

Lassen Sie dies eine Lektion für alle anderen sein, die auf der Suche sind - wenn alles andere fehlschlägt, denken Sie an den allmächtigen Tippfehler.

Brian Lacy
quelle
Ich hätte das niemals in einer Million Jahren gefangen! Ich hatte auch einen Tippfehler im Verzeichnispfad, auch ein Entwicklerprojekt ... Vielen Dank, dass Sie mir die Augen geöffnet haben.
gillytech
Ich hatte auch einen Tippfehler im Verzeichnisteil. Wirklich, das war so frustrierend. Es war ein Segen, dass ich darauf gestoßen bin und erfahren habe, dass ich super dumme Fehler machen kann.
Akash Kumar Sharma
Ich weiß, es sind 7 Jahre vergangen, aber ich wollte nur vorbeischauen und sagen, dass diese Antwort mir nur geholfen hat. Es war das Gleiche. Ich hatte Anweisungen von einem anderen virtuellen Host kopiert und das falsche Bit geändert. Vielen Dank für die Weitergabe dieser Informationen! Mit Bedacht surfen.
Dolst
5

Überprüfen Sie, ob in der Datei "httpd.conf" über der Deklaration von virtualhosts weitere "AllowOverride None" angegeben sind. Wahrscheinlich haben Sie "AllowOverride None" in Docroot.

Denis
quelle
Der Server, mit dem ich arbeite, ist ein Entwicklungsserver und ein genaues Duplikat unseres Produktionsservers. Die httpd.conf-Dateien sind praktisch identisch. Der EINZIGE signifikante Unterschied ist, dass unsere "virtual.conf" auf diesem Server weniger Einträge hat und jeder Site ein Präfix vorangestellt ist dev.. Der Produktionsserver funktioniert jedoch einwandfrei, die .htaccess-Dateien verhalten sich genau wie erwartet, und der Entwicklungsserver ignoriert die .htaccess-Datei einfach vollständig.
Brian Lacy
0

Drei Vermutungen:

Gibt es eigentlich ein Leerzeichen nach dem Komma in der Zeile order deny, allowin .htaccess? Apache mag das nicht. Für mich auf F13 bekam ich 500er.

Haben Sie AccessFileNameirgendwo eine Richtlinie?

Wenn Sie Selinux verwenden, haben Sie den richtigen Kontext für die Datei ( ls -lZ)?

Mark Wagner
quelle
Ich bekomme keine 500 Fehler. Die .htaccess-Datei wird einfach ignoriert. Und ich stellte fest, dass ich sowieso keinen Platz darin hatte. Ich weiß nichts über Selinux oder Kontexte, aber ich habe nachgeschlagen, wie man das überprüft, und anscheinend ist es deaktiviert. Was AccessFileNamewerde ich schaue mich um, aber wie gesagt in meinem Kommentar auf Denis' Antwort, die Apache - Konfiguration für diese beiden Server ist effektiv identisch.
Brian Lacy
Ich hatte auch Probleme mit dem Platz. Es hat mich verrückt gemacht.
egorgry
Whoops, Korrektur: Ich habe eine AccessFileName-Direktive in meiner httpd.conf. Es lautet wie folgt:AccessFileName .htaccess
Brian Lacy
0

Ich hatte dies auf einem neuen Server und stellte schließlich fest, dass Mod-Rewrite nicht standardmäßig aktiviert war.

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
jmullee
quelle