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

Как перенаправить корень в подкаталог, сохранив URL-адрес в адресной строке

У меня есть настройка nginx с такой структурой папок:

- www
  |- splash
  |- blog

www это корневая папка.

Я хочу перенаправить пользователей, которые имеют доступ http://example.com к splash папка.

Но я не хочу, чтобы URL-адрес в адресной строке менялся на http://example.com/splash.

URL-адрес в адресной строке по-прежнему должен быть http://example.com.

Это правило должно применяться только тогда, когда пользователь обращается к корневой папке.

Тем временем доступ к blog папка будет как обычно через: http://example.com/blog.

Как мне этого добиться? Пока что мой conf следующий: (они не работают, кстати, URL-адрес изменен)

server {
        listen 80;
        server_name www.example.com;
        root /www;
        location = / {
                rewrite ^/(.*)$ splash/$1 permanent;
        }
}

У каждого контекста может быть свой корень.

Поскольку у вас есть location контекст, просто измените корень.

Например.

location = / {
    root /www/splash;
}

Документация имеется Вот. Пример, приведенный в документации:

location  /i/ {
  root  /spool/w3;
}

Запрос на «/i/top.gif» вернет файл «/spool/w3/i/top.gif».

По сути, почти копия этого, за исключением того, что у вас есть = для точного совпадения местоположения.


Если есть файл с именем / splash / blog, хотите ли вы, чтобы этот URL-адрес перешел в / splash / blog или / blog?

Другой способ расставить приоритеты для файлов - использовать try_files. Например:

location / {
    try_files /splash/$uri $uri =404;
}

В этом случае, если в / splash есть соответствующий файл, он будет отображаться, в противном случае вместо него отображается $ uri или, в последнем случае, ошибка 404.

Это сработало для меня, если я правильно понял вашу ситуацию:

location ~/splash.* {
    return 200 "The request was $uri";
}

location / {
    rewrite ^/$ /splash/ last;
    root   /usr/share/nginx/html;
    index  index.html index.htm;
}

Из Документы Nginx

last прекращает обработку текущего набора директив ngx_http_rewrite_module и начинает поиск нового местоположения, соответствующего измененному URI;

Я не хотел создавать каталог / splash /, поэтому просто сказал Nginx ответить жестко закодированным текстом. Вы можете заменить его необходимыми директивами.

Вот и все ...

server {
        listen 80;
        server_name www.mysite.com;
        root /www;

        location = / {
                root /www/splash;
        }

        location / {
                root /www;
        }


}