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


Ich betreibe einen LAMP-Server auf Fedora 13, der funktioniert. Ich habe jedoch gerade eine ".htaccess" -Datei zum Docroot-Ordner meiner aktuellen Site hinzugefügt, die komplett ignoriert wird.

Ich habe ein halbes Dutzend verschiedene Tests ausprobiert, darunter auch dieses:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

Aber Bilder und alle anderen Seiten laden feine, und noch nicht vorhandene Dateien 404. Ich habe es auch versucht:

order deny,allow
deny from all

Aber jede Seite lädt immer noch gut. Auch hier wird die .htaccess-Datei einfach zu 100% ignoriert.

Wir haben unsere Virtualhost-Datensätze in /etc/httpd/conf.d/virtual.conf abgelegt. 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 sonst könnte dazu führen, dass unser Server den Server vollständig IGNORIERT .htaccess Datei??

Bearbeiten:

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

Bearbeiten 2:

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

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

Als ich das geändert habe AllowOverride AllMeine .htaccess-Dateien beginnen zu wirken. Es ist wie alles andere AllowOverride All Anweisungen in meinen Konfigurationsdateien werden ignoriert!

Was gibt??


19
2017-11-18 18:34


Ursprung




Antworten:


Unglaublich. Denken Sie daran, wie ich gesagt habe, dass dies ein Entwicklungsserver ist? Ja. Nun, hier ist, was mein virtueller Hosteintrag WIRKLICH aussieht:

<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 tat es nicht. Ich VERGESSEN meinen "Verzeichnis" -Eintrag zu dev.ourwebsite.com anstelle von ourwebsite.com zu ändern - und das machte den Unterschied. Ich habe einfach angenommen, dass Apache einen Fehler ausgegeben hätte, wenn das Verzeichnis nicht existiert hätte; aber das gilt nur für die DocumentRoot-Direktive. ist matchbasiert - das heißt, es wendet die Regeln an, wenn es der eingehenden Anfrage entspricht, aber ansonsten ist es egal, ob Sie AllowOverride an magischen Einhörnern sagen.

Lasst das eine Lektion für jeden sein, der kommt - wenn alles andere versagt, bedenke den allmächtigen Tippfehler.


29
2017-11-23 17:35



Ich hätte das in einer Million Jahren niemals gefangen! Ich hatte auch einen Tippfehler im Verzeichnispfad, auch ein Entwicklerprojekt ... Danke, dass du meine Augen geöffnet hast. - gillytech
Ich hatte auch einen Tippfehler im Verzeichnis Teil. Wirklich, das war so frustrierend. Es war ein Segen, dass ich darüber gekommen bin und von der Tatsache erfahren habe, dass ich super dumme Fehler machen kann. - Akash Kumar Sharma
Ich weiß, dass es schon 7 Jahre her ist, aber ich wollte nur reinkommen und sagen, dass diese Antwort mir nur geholfen hat. Es war die gleiche Art von Dingen. Ich hatte Anweisungen von einem anderen virtuellen Host kopiert und das falsche Bit geändert. Danke für das Teilen dieser Info! Surf weise. - dolst


Überprüfen Sie, ob ein anderes "AllowOverride None" in "httpd.conf" über der Virtualhosts-Deklaration angezeigt wird. Wahrscheinlich haben Sie in Docroot "AllowOverride None".


4
2017-11-18 18:54



Der Server, mit dem ich arbeite, ist ein Entwicklungsserver und ein exaktes 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 das Präfix gegeben wird dev.. Der Produktionsserver funktioniert jedoch einwandfrei, .htaccess-Dateien verhalten sich genau wie erwartet, und der Entwicklungsserver ignoriert die .htaccess-Datei vollständig. - Brian Lacy


Drei Vermutungen:

Gibt es tatsächlich ein Leerzeichen nach dem Komma in der Zeile order deny, allow im .htaccess? Apache mag das nicht. Für mich auf F13 bekam ich 500s.

Hast du ein AccessFileName Direktive überall?

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


0
2017-11-18 23:32



Ich bekomme keine 500 Fehler. Die .htaccess-Datei wird einfach ignoriert. Und ich habe festgestellt, dass ich dort sowieso keinen Platz hatte. Ich weiß nichts über Selinux oder Kontexte, aber ich habe nachgeschaut, wie man es überprüft und anscheinend deaktiviert ist. Wie für AccessFileNameIch schaue mich um, aber wie ich in meinem Kommentar zu Denis 'Antwort gesagt habe, ist die Apache-Konfiguration für diese beiden Server identisch. - Brian Lacy
Ich hatte auch Probleme mit dem Raum. 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