web-dev-qa-db-fra.com

Nginx redirige un chemin vers un autre

Je suis sûr que cela a déjà été demandé, mais je ne trouve pas de solution qui fonctionne.

Un site Web a changé de service CMS, mais a le même domaine, comment configurer une réécriture nginx pour une seule page?

Par exemple.

Ancienne page

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

Nouvelle page

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

Veuillez noter , je ne veux pas que tout dans la page de contenu soit redirigé, mais littéralement juste l'url mentionnée ci-dessus. J'ai environ 9 redirections à configurer, dont aucune ne correspond à un modèle.

Merci!

Edit: J'ai trouvé cette solution, qui semble fonctionner, sauf pour le fait qu'elle redirige sans barre oblique:

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

Mais cela redirige vers:

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

57
SteveEdson

Citation directe de Pièges et erreurs courantes: Taxing Rewrites :

En utilisant la directive return, nous pouvons complètement éviter l'évaluation de l'expression régulière.

Veuillez utiliser return au lieu de rewrite pour les redirections permanentes. Voici mon approche de ce cas d'utilisation ...

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

Idéalement, vous ne devriez pas utiliser d'instructions if si vous pouvez l'éviter. Quelque chose comme ça pourrait fonctionner (non testé).

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

J'ai utilisé la solution suivante:

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

Fonctionne un régal.

14
SteveEdson

Pour moi, cela a fonctionné sans le signe égal comme ceci:

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