2

Как я могу заставить nginx всегда обслуживать index.html независимо от URL?

Например, я хочу, чтобы URL https://www.example.me/723738 всегда обслуживал https://www.example.me/index.html

Я не хочу использовать перенаправление, потому что у пользователя все еще должен быть оригинальный URL, который он напечатал в своей адресной строке.

Я изменил конфигурацию Nginx, чтобы перенаправить 404 в index.html, но я не думаю, что это отличный способ сделать это, потому что он вернет ответ 404.

В будущем я могу захотеть, чтобы index.html отображал исходный URL, к которому обратился пользователь, есть ли способ сделать это?

Спасибо

3 ответа3

3

Общий шаблон использует try_files с URI по умолчанию. Для минималистского примера:

server {
    root /path/to/root;
    location / {
        try_files $uri $uri/ /index.html;
    }
}

Смотрите этот документ для более.

1

Ответ на вопрос 1:

Функция, которую вы ищете, называется перезаписью URL. Это позволяет создавать маски (или "поддельные" URL-адреса), которые показывают ресурс, расположенный по другому URL-адресу.

В Nginx это достигается с помощью команды rewrite <regexp-pattern> <target-url> в файле конфигурации. Вот конфигурация Nginx для домена www.example.com:

server {
    listen 80;
    server_name www.example.com;

    root /var/www/example.com;
    index index.html;

    rewrite ^.*$ /index.html;
}

Часть <regexp-pattern> (REGular EXPression) сравнивается с URL-адресом, введенным вами в браузер. Если совпадение выполнено успешно, отображается ресурс по адресу <target-url> .

Ответ на вопрос 2:

Текущий URL не может быть показан только в чистом HTML-документе. Вам нужно будет использовать язык сценариев на стороне сервера - например, PHP. Это позволит вам отображать динамический контент для пользователя. Существует неисчерпаемая поставка руководств по PHP с Nginx (https://askubuntu.com/a/134676) и по теме отображения текущего URL из PHP (https://stackoverflow.com/a/6768831).

0

Это код, который вы ищете

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/;
index index.html;

location = /favicon.ico { access_log off; log_not_found off; }

error_page 404 =200 /;
}

С именем_сервера _; он слушает с любого ip, домена.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .