URL-адрес перенаправления nginx на новый шаблон

В настоящее время я переключаю свой блог с Wordpress на Ghost. Перед призраком стоит nginx. После миграции я узнал, что старые URL-адреса

http://domain.org/2015/10/some-topic

мигрируют как

http://domain.org/some-topic

Итак, дата ушла. В любом случае есть некоторые обратные ссылки, которые я не хочу терять, но я не очень хорошо знаком с nginx ... Итак, как лучше всего перенаправить со старого стиля URL на новый?

Моя текущая конфигурация выглядит так:

server {
            listen 80;
            server_name domain.org;

            location / {
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header HOST $http_host;
             proxy_set_header X-NginX-Proxy true;

            proxy_pass http://10.240.0.2:2368;
            proxy_redirect off;
            }
    }

Что нужно добавить?. Полагаю, мне нужно новое место, но как оно должно выглядеть?


person aholbreich    schedule 06.10.2015    source источник


Ответы (2)


Я бы рекомендовал использовать карту:

map $uri $redirect_topic {
    "~^/\d{4}/\d{2}/(?<topic>.*)" $topic;
}

server {
    listen 80;
    server_name domain.org;

    if ($redirect_topic) {
        return 301 $scheme://$host/$redirect_topic;
    }

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://10.240.0.2:2368;
        proxy_redirect off;
    }
}
person Cole Tierney    schedule 06.10.2015
comment
Спасибо, выглядит многообещающе. Я должен проверить это. Включены ли функции карты в nginx по умолчанию? - person aholbreich; 08.10.2015
comment
Greate работает как шарм! нотация ‹topic› была для меня в новинку ;) - person aholbreich; 08.10.2015
comment
Я рад, что вы нашли это полезным. :) Карты очень полезны и являются хорошим местом для использования регулярных выражений, как объяснено автором. . - person Cole Tierney; 09.10.2015

Я думаю, вы должны поместить в раздел server:

rewrite ^/[0-9]*/[0-9]*(/.*) $1 last;

Но если у вас есть какие-то дополнительные пожелания, может быть, лучше в разделе location (как вы написали).

Дополнительную информацию см. в официальной документации nginx.

person uzsolt    schedule 06.10.2015
comment
Это решение переписывает внутренне? Я думаю, может быть, в долгосрочной перспективе лучше отправить 301. - person aholbreich; 08.10.2015
comment
Может быть, вы правы. У меня было не так много времени, чтобы подумать над вопросом, и это была моя первая идея. - person uzsolt; 08.10.2015