Je voudrais que les URL suivantes sur mon site soient équivalentes:
/foo/bar
/foo/bar/
/foo/bar/index.html
et en outre, je voudrais que les deux seconds formulaires émettent des redirections HTTP 301 vers le premier formulaire. Je ne sers que des pages statiques, et elles sont organisées selon le troisième formulaire. (En d'autres termes, lorsqu'un utilisateur demande, /foo/bar
il doit recevoir le fichier à l'adresse /usr/share/.../foo/bar/index.html
).
Mon nginx.conf
contient actuellement les éléments suivants:
rewrite ^(.+)/$ $1 permanent;
index index.html;
try_files $uri $uri/index.html =404;
Cela fonctionne pour les demandes de /foo/bar/index.html
, mais lorsque je demande /foo/bar
ou que /foo/bar/
Safari me dit que «trop de redirections se sont produites» - je suppose qu'il y a une boucle de redirection infinie ou quelque chose comme ça. Comment puis-je demander à nginx de mapper des URL à des fichiers comme je l'ai décrit?
Edit: Ma configuration complète
Voici mon tout nginx.conf
avec mon nom de domaine remplacé par "example.com".
user www-data;
worker_processes 1;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_tokens off;
server_names_hash_bucket_size 64;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss application/atom+xml text/javascript image/svg+xml;
server {
server_name www.example.com;
listen 80;
return 301 $scheme://example.com$request_uri;
}
server {
server_name example.com 123.45.67.89 localhost;
listen 80 default_server;
# Redirect /foobar/ to /foobar
rewrite ^(.+)/$ $1 permanent;
root /usr/share/nginx/www/example.com;
index index.html;
try_files $uri $uri/index.html =404;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
/foo/bar/index.html
doivent renvoyer le fichier à /usr/share/nginx/www/foo/bar/index.html
ou quelle que soit sa configuration. Tous les chemins du site Web correspondent directement aux chemins du système de fichiers.