Назад | Перейти на главную страницу

Обслуживание страницы, URL-адрес которой заканчивается косой чертой с помощью nginx

Я хочу, чтобы 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 в каждый блок местоположения, если подойдет директива за пределами блоков местоположения.