So legen Sie index.html für den Domainnamen fest, z. https://www.example.com/ - führt den Benutzer zu index.html im Stammverzeichnis.
Ich habe verschiedene Dinge ausprobiert wie:
server {
# some configs
location = / {
index index.html;
fastcgi_index index.html;
}
or
location / {
index index.html;
fastcgi_index index.html;
}
}
Nichts hat mir geholfen.
Es gibt einige andere Konfigurationen mit dem Schlüsselwort location, obwohl ich sie auch kommentiert habe.
Andere "location" -Konfigurationen in der server {
-Klausel:
location ~ .*(css|htc|js|bmp|jp?g|gif|ico|cur|png|swf|htm?|html)$ {
access_log off;
root $www_root;
}
location ~ \.php$
{
include /etc/nginx/fastcgi_params;
index index.html;
fastcgi_index index.html;
fastcgi_param SCRIPT_FILENAME $www_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
# Директива определяет что ответы FastCGI-сервера с кодом больше или равные 400
# перенаправлять на обработку nginx'у с помощью директивы error_page
fastcgi_intercept_errors on;
break;
}
location ~ /\.ht {
deny all;
}
Alle waren kommentiert und unkommentiert, aber nichts half.
PS-Editionen wurden in der Datei /etc/nginx/sites-enabled/domainname.com erstellt.
Die Antwort besteht darin, das Wurzelverzeichnis zu den Standortanweisungen zu platzieren:
root /srv/www/ducklington.org/public_html;
in Ihrem Standortblock können Sie Folgendes tun:
location / {
try_files $uri $uri/index.html;
}
in diesem Fall wird ngingx angewiesen, nach einer Datei mit dem genauen Namen zu suchen, die zuerst angegeben wurde. Wenn keine solche Datei gefunden wird, wird uri/index.html versucht. Wenn also eine Anfrage nach https://www.example.com/ kommt, würde sie zuerst nach einer genauen Datei suchen und nicht finden, dass dann nach index.html gesucht wird
location / {
ist der allgemeinste Ort (mit location {
). Es wird alles passen, AFAIU . Ich bezweifle, dass es sinnvoll wäre, location / { index index.html; }
zu haben, da für jedes Unterverzeichnis Ihrer Website viel doppelten Inhalt vorhanden ist.
Der Ansatz mit
try_files $ uri $ uri/index.html index.html;
wie in einem Kommentar oben erwähnt, ist es schlecht, da er index.html
für Seiten zurückgibt, die auf Ihrer Website nicht vorhanden sein sollten (alle möglichen $uri
-Dateien enden dort) Umleitung im letzten Argument von try_files
.
Ihr Ansatz
location = / { index index.html;
ist auch schlecht, da index
auch eine interne Weiterleitung durchführt. Wenn Sie das wollen, sollten Sie in der Lage sein, dies in einem bestimmten location
zu behandeln. Erstellen Sie z.
location = /index.html {
wie vorgeschlagen wurde hier . Dann haben Sie jedoch einen funktionierenden Link http://example.org/index.html
, der möglicherweise nicht erwünscht ist. Eine andere Variante, die ich verwende, ist:
root /www/my-root;
# http://example.org
# = means exact location
location = / {
try_files /index.html =404;
}
# disable http://example.org/index as a duplicate content
location = /index { return 404; }
# This is a general location.
# (e.g. http://example.org/contacts <- contacts.html)
location / {
# use fastcgi or whatever you need here
# return 404 if doesn't exist
try_files $uri.html =404;
}
P.S. debug nginx ist extrem einfach (wenn Ihre Binärdatei dies zulässt). Fügen Sie einfach den server {
-Block hinzu:
error_log /var/log/nginx/debug.log debug;
und dort alle internen Weiterleitungen usw. sehen.
Laut Dokumentation Überprüft das Vorhandensein von Dateien in der angegebenen Reihenfolge und verwendet die erste gefundene Datei für die Anforderungsverarbeitung. Die Verarbeitung wird im aktuellen Kontext ausgeführt. Der Pfad zu einer Datei wird anhand des Dateiparameters gemäß den Direktiven root und alias erstellt. Sie können das Vorhandensein des Verzeichnisses überprüfen, indem Sie am Ende eines Namens einen Schrägstrich angeben, z. "$ Uri /". Wenn keine der Dateien gefunden wurde, wird eine interne Weiterleitung an den im letzten Parameter angegebenen URI vorgenommen. Wichtig
eine interne Weiterleitung zu dem im letzten Parameter angegebenen URI ist gemacht.
Im letzten Parameter sollten Sie also Ihre Seite oder Ihren Code hinzufügen, wenn die ersten beiden Parameter false zurückgeben.
location / {
try_files $uri $uri/index.html index.html;
}
Für mich führte die try_files
-Direktive in der (derzeit am meisten bewerteten) Antwort https://stackoverflow.com/a/11957896/608359 dazu, Zyklen umzuschreiben,
*173 rewrite or internal redirection cycle while internally redirecting
Ich hatte mehr Glück mit der Index-Direktive. Beachten Sie, dass ich vor dem Namen einen Schrägstrich verwendet habe, der möglicherweise nicht Ihren Vorstellungen entspricht.
server {
listen 443 ssl;
server_name example.com;
root /home/dclo/example;
index /index.html;
error_page 404 /index.html;
# ... ssl configuration
}
In diesem Fall wollte ich, dass alle Pfade zu /index.html führen, auch wenn Sie eine 404 zurückgeben.