Comment définir index.html pour le nom de domaine, par exemple https://www.example.com/ - conduit l'utilisateur à index.html dans le répertoire racine.
J'ai essayé différentes choses comme:
server {
# some configs
location = / {
index index.html;
fastcgi_index index.html;
}
or
location / {
index index.html;
fastcgi_index index.html;
}
}
Rien ne m'a aidé.
Il y a quelques autres configs avec le mot-clé location, bien que je les ai commentées non plus.
Les autres "emplacements" configurés dans la clause server {
:
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;
}
Tous ont été commentés et non commentés, mais rien n'a aidé.
Les éditions PS ont été créées dans le fichier /etc/nginx/sites-enabled/domainname.com.
La réponse consiste à placer le répertoire racine dans les directives d'emplacement:
root /srv/www/ducklington.org/public_html;
dans votre bloc de localisation, vous pouvez faire:
location / {
try_files $uri $uri/index.html;
}
qui dira à ngingx de chercher un fichier avec le nom exact donné en premier, et si aucun fichier de ce type n’est trouvé, il essaiera uri/index.html. Donc, si une requête pour https://www.example.com/ est reçue, elle recherchera d'abord une correspondance de fichier exacte.
location / {
est l'emplacement le plus général (avec location {
). Cela correspond à tout, AFAIU . Je doute qu'il soit utile d'avoir location / { index index.html; }
en raison de nombreux contenus dupliqués pour chaque sous-répertoire de votre site.
L'approche avec
try_files $ uri $ uri/index.html index.html;
est mauvais, comme mentionné dans un commentaire ci-dessus, car il renvoie index.html
pour des pages qui ne devraient pas exister sur votre site (tout $uri
possible finira par cela) . rediriger dans le dernier argument de try_files
.
Votre approche
location = / { index index.html;
est également mauvais, puisque index
effectue également une redirection interne. Au cas où vous le souhaiteriez, vous devriez pouvoir gérer cela dans une location
spécifique. Créer par exemple.
location = /index.html {
comme cela a été proposé ici . Mais alors vous aurez un lien de travail http://example.org/index.html
, qui peut ne pas être désiré. Une autre variante, que j'utilise, est la suivante:
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. Il est extrêmement facile de déboguer nginx (si votre binaire le permet). Ajoutez simplement dans le bloc server {
:
error_log /var/log/nginx/debug.log debug;
et y voir toutes les redirections internes, etc.
Selon la documentation Vérifie l’existence de fichiers dans l’ordre spécifié et utilise le premier fichier trouvé pour le traitement de la demande; le traitement est effectué dans le contexte actuel. Le chemin d'accès à un fichier est construit à partir du paramètre file conformément aux directives root et alias. Il est possible de vérifier l’existence du répertoire en spécifiant une barre oblique à la fin du nom, par exemple. “$ Uri /”. Si aucun des fichiers n'a été trouvé, une redirection interne vers l'URI spécifié dans le dernier paramètre est effectuée. Important
une redirection interne vers l'URI spécifié dans le dernier paramètre est fabriqué.
Donc, en dernier paramètre, vous devez ajouter votre page ou votre code si les deux premiers paramètres renvoient false.
location / {
try_files $uri $uri/index.html index.html;
}
Pour moi, la directive try_files
dans la réponse (actuellement la plus votée) https://stackoverflow.com/a/11957896/608359 conduit à des cycles de réécriture,
*173 rewrite or internal redirection cycle while internally redirecting
J'ai eu plus de chance avec la directive index. Notez que j'ai utilisé une barre oblique avant le nom, ce qui peut être ou ne pas être ce que vous voulez.
server {
listen 443 ssl;
server_name example.com;
root /home/dclo/example;
index /index.html;
error_page 404 /index.html;
# ... ssl configuration
}
Dans ce cas, je voulais que tous les chemins mènent à /index.html, y compris lors du renvoi d'un 404.