Задать вопрос
teet
@teet

Как сделать rewrite со старого uri на новый без редиректа?

Перенес старый проект на систему управления контентом написанную на yii (open-real-estate.info).
Конфигурация nginx:
server {
  listen  80;
  server_name  localhost;
  charset utf-8;
  error_log  /home/user/logs/nginx.log;
  root   /home/user/html;
  index  index.php;

  location = /old-uri {
    rewrite /old-uri /service-1 last;
  }

  location / {
    root   /home/user/html;
    fastcgi_pass   unix:/var/run/php-fpm.sock;
    fastcgi_index  index.php;

    fastcgi_param  SCRIPT_FILENAME  $document_root/index.php;

    include        fastcgi_params;
  }

  location = /favicon.ico {
    return  204;
  }

  location ~* \.(jpg|jpeg|gif|ico|png|xml|zip|css|js|html|json|txt|swf|mov)$ {
    try_files  $uri =404;
    expires  max;
  }

  location ~ /\. {
    deny  all;
    log_not_found  off;
  }
}

Система управления работает отлично. Но некоторые ссылки видоизменились (оссобенности CMS: в частности нельзя давать определенный uri для фильтров. фильтры теперь называются service-1, service-2 и тд). Дабы не рыться в исходниках, решил используя nginx + rewrite модуль просто перенаправлять определенные ссылки:
location = /old-uri {
    rewrite /old-uri /service-1 last;
  }

Но это не работает - nginx возвращает 404.
Подскажите как можно решить данную проблему не изменяя исходных кодов CMS.
  • Вопрос задан
  • 371 просмотр
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Softer
@Softer
Можно просто вместо last указать permanent. Это если не страшно чтобы ссылка менялась у пользователя. :)

PS: Не думаю что тут нужны location отдельные, я обычно такое (rewrite permanent) или в "location /" или вообще на уровень "server" выношу...
Ответ написан
kuroneco
@kuroneco
Системный администратор
Вам,
location = /old-uri {
rewrite /old-uri /service-1 last;
}
не нужен.

Достаточно,
rewrite ^/old-uri /service-1 last;

Если же, это не работает, то, возможно, при обращении к old-uri передаются аргументы, которые тоже нужно передать к /service-1
По хорошему, при каждом изменении location, смотрите access log, чтобы понять что передается.
Ответ написан
Комментировать
teet
@teet Автор вопроса
Вставил пару костылей в систему управления контентом.
Кому интересно, могу выслать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы