web-dev-qa-db-ja.com

Nginxは1つのパスを別のパスにリダイレクトします

これは以前に尋ねられたと確信していますが、機能する解決策を見つけることができません。

WebサイトがCMSサービスを切り替えましたが、ドメインは同じですが、単一のページに対してnginx書き換えを設定するにはどうすればよいですか?

例えば。

古いページ

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

新しいページ

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

注意してください、コンテンツページ内のすべてがリダイレクトされることを望んでいませんが、文字通り上記のURLのみです。設定するリダイレクトは約9個あり、そのうちの1つはパターンに適合しません。

ありがとう!

編集:私はこの解決策を見つけました、スラッシュなしでリダイレクトするという事実を除いて、それは機能しているようです:

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/

57
SteveEdson

からの直接の引用落とし穴とよくある間違い:課税の書き換え

Returnディレクティブを使用することで、正規表現の評価を完全に回避できます。

永続的なリダイレクトには、returnではなくrewriteを使用してください。これがこのユースケースへの私のアプローチです...

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

可能であれば、ifステートメントを使用しないでください。このようなものが機能する可能性があります(テストされていません)。

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

私は次の解決策を使用しました:

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

御馳走を働きます。

14
SteveEdson

私にとっては、次のように等号なしで機能しました:

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