84 votes

Nginx redirige un chemin vers un autre

Je suis sûr que cette question a déjà été posée, mais je n'arrive pas à trouver une solution qui fonctionne.

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

z.B.

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 ce qui se trouve dans la page de contenu soit redirigé, mais juste l'url mentionnée ci-dessus. J'ai environ 9 redirections à mettre en place, dont aucune ne correspond à un modèle.

Gracias.

Edit : J'ai trouvé cette solution, qui semble fonctionner, à l'exception du fait qu'elle redirige sans slash :

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/

132voto

Pothi Kalimuthu Points 5514

Citation directe de Pièges et erreurs courantes : Les réécritures imposées :

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

Veuillez utiliser return 代わりに 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;
}

29voto

Gevious Points 435

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

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

18voto

sumora Points 1

J'ai utilisé la solution suivante :

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

Ça marche très bien.

14voto

primetimejas Points 231

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

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

0voto

Osvaldo Pérez Points 1

Cela fonctionne pour moi.

server {
  listen 80;

  location = /content/unique-page-name {
    return 301 http://sitedomain.co.uk/new-name/unique-page-name;
  }
}

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X