Я хочу, чтобы nginx обслуживал HTML-файл для /foobar/
. Я попробовал 2 конфигурации, и ни одна из них не сработала.
В Apache это делается так:
AliasMatch ^/foobar/$ /home/admin/foobar/foobar.html
Моя первая попытка:
location /foobar/ {
alias /home/admin/foobar/foobar.html;
}
Собирается /foobar/
показывает страницу с ошибкой 500. Журнал ошибок говорит:
2011/08/05 04:12:35 [alert] 32465#0: *1 "/home/admin/foobar/foobar.htmlindex.html" is not a directory, ...
Это странно. Почему он добавил "index.html" в конец пути к файлу?
Моя следующая попытка:
location ~ ^/foobar$ {
alias /home/admin/foobar/foobar.html;
}
Собирается /foobar
заставляет мой браузер загружать файл. Это странно. Почему так случилось?
Мне удалось заставить его работать с этим:
location /foobar.html {
alias /home/admin/foobar/foobar.html;
}
Это работает, но у него неправильный URL. Оно имеет /foobar.html
вместо того /foobar/
.
Как мне это сделать?
Причина добавления index.html в том, что индекс директива (возможно, в вашем основном файле nginx.conf)
Обычно он читается примерно так:
index index.php index.htm index.html
который сообщает nginx, что делать, когда его просят обслуживать каталог (в приведенном выше случае попробуйте обслужить index.php
, если этого не существует, попробуйте index.htm
, и т.д.)
Что вы можете сделать, так это добавить дополнительную директиву индекса в блок местоположения, если это особый случай или если вы всегда хотите обслуживать foobar.html
для любого каталога измените вашу основную директиву index.
например (чтобы переопределить индекс только для одного конкретного места):
location /foobar/ {
index foobar.html;
}
Не помещайте директиву index в каждый блок местоположения, если подойдет директива за пределами блоков местоположения.