Вопрос: Nginx перенаправляет один путь на другой


Я уверен, что это было задано раньше, но я не могу найти решение, которое работает.

Веб-сайт переключил службы CMS, но имеет тот же домен, как мне настроить переписку nginx для одной страницы?

Например.

Старая страница

http://sitedomain.co.uk/content/unique-page-name

Новая страница

http://sitedomain.co.uk/new-name/unique-page-name

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

Благодаря!

Изменить: я нашел это решение, которое, похоже, работает, за исключением того факта, что он перенаправляет без косой черты:

if ( $request_filename ~ content/unique-page-name/ ) {
   rewrite ^ http://sitedomain.co.uk/new-name/unique-page-name/? permanent;
}

Но это перенаправляет на:

http://sitedomain.co.uknew-name/unique-page-name/


37
2017-10-25 09:06


Источник




Ответы:


Прямая цитата из Ловушки и распространенные ошибки: Налогообложение переписывает:

Используя директиву return, мы можем полностью избежать оценки регулярного выражения.

Пожалуйста, используйте return вместо rewrite для постоянных переадресаций. Вот мой подход к этому случаю использования ...

location = /content/unique-page-name {
  return 301 /new-name/unique-page-name;
}

61
2017-10-25 09:44



Это определенно более читаемо. Будет ли это также содержать любые запросы, которые были на исходном URL-адресе? - SteveEdson
Неа. Это не так. Если вы действительно хотите сохранить какие-либо запросы при постоянных переадресациях, см. Этот маленький трюк ... gist.github.com/pothi/7152399 - Pothi Kalimuthu
Правильно ли я считаю, что использование if заявления в nginx плохие? Будет ли это еще лучше, чем использовать метод перезаписи? - SteveEdson
С помощью if наряду с директивой возврата - отлично. Видеть wiki.nginx.org/IfIsEvil , Да, ИМО, это лучше, чем использовать переписать. - Pothi Kalimuthu


В идеале вы не должны использовать инструкции if, если можете этого избежать. Что-то вроде этого может работать (непроверено).

location ~ /content/(.*)$ {
    rewrite ^ /new-name/$1?$args permanent;
} 

9
2017-10-25 09:17



Разве это не поймало бы все в каталоге контента? Я только хочу перенаправить отдельный элемент. Например, у меня есть другой элемент в каталоге содержимого, но мне нужно перенаправить его на ... / another-new-name / unique-page-name2 - SteveEdson
Я решил это. Оказывается, он перенаправляет правильно, но сценарий был ударом, искал URL после. - SteveEdson
Ах, я не понял этот вопрос. Я думал, вы хотите изменить только часть контента. Принцип не изменился. Я рад, что он работает на вас. - Gevious
Нет проблем, спасибо за помощь, хотя, я определенно буду использовать это в будущем. - SteveEdson


Я использовал следующее решение:

rewrite ^(/content/unique-page-name)(.*)$   http://sitedomain.co.uk/new-name/unique-page-name/$2 permanent;

Работает.


7
2017-10-25 09:32



Это должен быть правильный ответ. Нет необходимости в бесполезной location блок. - PKHunter


Для меня он работал без знака равенства:

location /old-url {
  return 301 /new-url;
}

5
2018-02-04 12:26



Вам не нужен блок местоположения вообще. Просто используйте rewrite, См. Ответ @ SteveEdison. - PKHunter