Как настроить правила перезаписи nginx для удаления страницы индекса для одностраничного JS-приложения и перенаправления нехешированных URL-адресов на хешированные URL-адреса?

Как настроить правила перезаписи nginx для удаления страницы индекса для одностраничного JS-приложения и перенаправления нехешированных URL-адресов на хешированные URL-адреса?

Я разработчик ПО, пишу одностраничное JS-приложение. Я ни в коем случае не сисадмин, так что, пожалуйста, отнеситесь ко мне с пониманием.

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

  1. mysite.com/index.html -> перенаправление на mysite.com
  2. mysite.com/path/they/remember -> перенаправление на хешированную версию: mysite.com/#/path/they/remember

Я пробовал разные способы, но постоянно сталкиваюсь с циклами перенаправления. Вот конфигурация, которая у меня сейчас:

Примечание: вы заметите, что /api также требует, чтобы все запросы были внутренне перенаправлены через облегченный прокси-сервер OAuth, поэтому любое решение, которое я использую, не сможет прервать это перенаправление.

server {

# Redirect all requests through /api/ to apiproxy.php
location /api {
    rewrite ^/api/?(.*)$ /apiproxy.php/$1 last;
}

location / {
    index index.html
}

# use case #1 (combined with use case #2 optionally, a url such as mysite.com/index.html/path/they/remember)
location ~ /index.html/?(.*) {
    return 301 http://mysite.com\#/$1;
}

location ~ /(.*) {
    return 301 http://mysite.com\#/$1;
}

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

решение1

во-первых, увеличьте уровень ведения журнала и проверьте свои журналы.

Ваш последний блок местоположения, похоже, фальшивый.

также, return 301 http://mysite.com\#/$1;кажется, это не законно; вы хотели сделать return 301 http://mysite.com/\#/$1/;?

Вам нужно бежать #?

Связанный контент