Вот каталог, содержащий статические файлы 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.
Что дает?
Пример, который вы используете, работает для возврата содержимого каталога 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
block будет применяться ко всему серверу.try_files $uri $uri/ @htmlext
сначала будет искать точное совпадение для файла или каталога, прежде чем, наконец, пытаться добавить .html
.try_files $uri =404
чтобы предотвратить застревание Nginx в цикле перезаписи, если файл не может быть найден.rewrite ^(.*)$ $1.html last
добавляет .html
и перезапускает процесс сопоставления URI.