@facetheheat

Как настроить редирект на Nginx/Ghost?

Есть блог на движке Эгея.
Ссылки вот такого формата:
domain.com/?go=all/article-name-hello-world/
domain.com/?go=all/note-name-hi-kitty/
...


Есть желание перенести блог с Эгея на Ghost.
Уже все настроено, осталось преобразовать старые ссылки.

Чтобы при заходе на
domain.com/?go=all/note-name-hi-kitty/
срабатывал редирект на
domain.com/2014/12/23/note-name-hi-kitty/
Ссылок не так много, мне даже подойдет прописывание абсолютных путей.

Пробовал прописывать в /etc/nginx/sites-enabled/ghost
rewrite ^/?go=all/(.*)$ domain.com/$1 permanent;
rewrite ^/\?go=all/(.*)$ domain.com/$1 permanent;
rewrite ~*/\?go=all/(.*)$ domain.com/$1 permanent;


Видимо ошибка где-то в регулярке, т.к. в логах есть сообщения
/hello-kitty/ HTTP/1.1", host: "domain.com"
2015/02/10 05:45:16 [notice] 2300#0: *73 "^/?go=all/(.*)$" does not match "/", client: 127.0.0.1, server: 127.0.0.1, request: "GET /?go=all/hello-kitty/ HTTP/1.1", host: "domain.com"
2015/02/10 05:45:16 [notice] 2300#0: *73 "^/\?go=all/(.*)$" does not match "/", client: 127.0.0.1, server: 127.0.0.1, request: "GET /?go=all/hello-kitty/ HTTP/1.1", host: "domain.com"
2015/02/10 05:45:16 [notice] 2300#0: *73 "~*/\?go=all/(.*)$" does not match "/", client: 127.0.0.1, server: 127.0.0.1, request: "GET /?go=all/hello-kitty/ HTTP/1.1", host: "domain.com"
  • Вопрос задан
  • 2521 просмотр
Пригласить эксперта
Ответы на вопрос 2
Lynn
@Lynn
nginx, js, css
Я бы сделал так:

map $arg_go $new_url {
  default "";
  all/note-name-hi-kitty/ /2014/12/23/note-name-hi-kitty/;
  all/article-name-hello-world/ /2014/01/01/article-name-hello-world/;
  # тут остальные ссылки
}

server {
  listen 80;
  server_name example.com;

  location = / {
    if ($new_url) {
      return 301 $new_url;
    }

    # тут какой-то конфиг для корня
  }

  # всё остальное
Ответ написан
Комментировать
@facetheheat Автор вопроса
Что-то поменялось, но пока не работает как нужно :

запрос
http://127.0.0.1/?go=all/note-name-hi-kitty/

редиректит на
http://127.0.0.1/index.html/?go=all/note-name-hi-kitty/


/etc/nginx/sites-enabled/ghost
map $arg_go $new_url {
  default "";
  all/note-name-hi-kitty/ /2014/12/23/note-name-hi-kitty/;
  all/article-name-hello-world/ /2014/01/01/article-name-hello-world/;
  # тут остальные ссылки
}
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    server_name 127.0.0.1;

    #redirect for old links
    location = / {
       if ($new_url) {
          return 301 $new_url;
       }
    }

    root /usr/share/nginx/html;
    index index.html index.htm;

    client_max_body_size 10G;

    location / {
        proxy_pass http://localhost:2368;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
    }

}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы