nginx try_files переписать.html в "чистый" URL

Вот каталог, содержащий статические HTML-файлы

public
|-- index.html
|-- media
|   `-- blurred_image-8.jpg
|-- post
|   `-- 13considerations
|       `-- index.html

Я пытаюсь настроить nginx для преобразования всех URL-адресов, заканчивающихся на .html вырезать суффикс.

Как это:-

server {
    listen       80;
    server_name  mysite.com;

    location / {
        root   /var/www/mysite/public;
        try_files  $uri  $uri/ $uri/index.html;
    }

    location /media/ {
        alias /var/www/mysite/public/media/;
        error_page 404 = /404;
        expires 30d;
    }

    location /static/ {
        alias /var/www/mysite/public/static/;
        error_page 404 = /404;
        expires 30d;
    }
}

Это работает правильно для домашней страницы " http://mysite.com/", но если я пытаюсь получить доступ к " http://mysite.com/post/13considerations/", я получаю 500 внутренних ошибок сервера.

Что дает?

1 ответ

Решение

Пример, который вы используете, работает для возврата содержимого каталога index.html файл, но не будет работать для файлов (например, http://server/somedir/file не вернет содержимое /somedir/file.html).

Упрощенная конфигурация, которая вернет любой HTML-файл без его расширения и будет использовать index.html для каталогов выглядит следующим образом:

server {
    listen       80;
    server_name  mysite.com;

    index index.html;
    root /var/www/mysite/public;

    location / { 
        try_files $uri $uri/ @htmlext;
    }   

    location ~ \.html$ {
        try_files $uri =404;
    }   

    location @htmlext {
        rewrite ^(.*)$ $1.html last;
    }   
}

Как это устроено:

  • Определение index index.html по умолчанию будет использовать этот файл при обращении к URI каталога.
  • Ввод root вне location Блок будет применяться на всем сервере.
  • try_files $uri $uri/ @htmlext сначала будет искать точное совпадение для файла или каталога, прежде чем, наконец, попытаться добавить .html,
  • try_files $uri =404 чтобы предотвратить застревание Nginx в цикле перезаписи, если файл не может быть найден.
  • rewrite ^(.*)$ $1.html last присоединяет .html и перезапускает процесс сопоставления URI.
Другие вопросы по тегам