In Nginx gibt es try_files
eine config-Direktive, die "das Vorhandensein von Dateien in der angegebenen Reihenfolge überprüft und die erste gefundene Datei zurückgibt". Ich finde es sehr ordentlich, dies zu tun
location ~* \.(gif|jpe?g|css|js)$ {
try_files $uri 404;
}
Dies ist eine sichere Methode, um statische Dateien direkt bereitzustellen, ohne die Web-Frameworks zu beeinträchtigen. Wie kann ich dasselbe in Apache machen?
apache-2.2
nginx
phunehehe
quelle
quelle
Antworten:
Ich sehe das normalerweise mit mod_rewrite:
Es bedeutet "Wenn eine Datei im Dateisystem nicht vorhanden ist, proxyen Sie sie über meinen mod_proxy_balancer-Cluster." Andernfalls wird die Datei, wenn sie im Dateisystem vorhanden ist, von Apache nur relativ zu der
DocumentRoot
in Ihrem virtuellen Host definierten Datei bereitgestellt.Aber das ist nicht meine Lieblingsmethode, vor allem, weil es einen
stat
Systemaufruf pro Anfrage erfordern würde .Mit mod_proxy können Sie verwenden,
ProxyPassMatch
wenn Sie eine ausreichend neue Version von Apache haben ( siehe Dokumentation ). Sowie:ProxyPassMatch \.(gif|jpe?g|css|js)$ !
Welches nutzt die! Apache sollte keine Proxy-Anfragen stellen, die diesem regulären Ausdruck entsprechen.
Wenn Sie eine ältere Version von Apache verwenden, steht Ihnen die
ProxyPass
Direktive zur Verfügung, sie stimmt jedoch nur mit URI-Präfixen überein (dies ist meine derzeit bevorzugte Methode):Wenn Sie einen Abgleich mit regulären Ausdrücken durchführen müssen, wie oben erwähnt, können Sie einfach die mod_rewrite-Regel ändern, die ich oben veröffentlicht habe, um eine Übereinstimmung mit der zu negieren
%{REQUEST_URI}
.Ich hoffe, das hilft!
quelle
try_files
, weil er die Existenz der Datei überprüft. Es scheint jedoch keinen Weg zu geben, dies zu tunProxyPass
.