Использование местоположения nginx с файлами HTML с разными именами - PullRequest
0 голосов
/ 28 апреля 2018

Я хочу, чтобы мой www.example.com/select возвращал файл /srv/www/example/static/html/select.html Мой example.conf настроен так, как показано ниже, но это не помогает

server {
  server_name  mywebsite.com www.mywebsite.com;

  root /srv/www/mywebsite/static;

  #charset koi8-r;
  #access_log  /var/log/nginx/host.access.log  main;

  location = / {
      index  html/index.html;
  }

  location = /select {
      index html/select.html;
  }

  listen 443 ssl; # managed by Certbot
  ssl_certificate /etc/letsencrypt/live/mywebsite.com/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/mywebsite.com/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

Несмотря на то, что index.html возвращается, попытка получить / выбрать будет регистрировать эту ошибку

2018/04/28 08:16:59 [error] 17160#17160: *43106 open() "/srv/www/mywebsite/static/select" failed (2: No such file or directory)

Как мне настроить мой nginx для получения желаемого результата?

1 Ответ

0 голосов
/ 28 апреля 2018

Директива index работает с URI, оканчивающимися на /, поэтому в этом случае работать не будет. Подробнее см. в этом документе .

Если у вас есть только один URI, вы можете использовать:

location = /select {
    rewrite ^ /html/select.html last;
}

Есть ли причина, по которой вы оставили суффикс /html/ в значении root? Более общее решение может быть:

root /srv/www/mywebsite/static/html;

location / {
    try_files $uri $uri/ $uri.html =404;
}

Подробнее см. в этом документе .

...