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


51

これは以前に尋ねられたと確信していますが、有効な解決策は見つかりません。

Webサイトは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/

回答:


87

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

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

永続的なリダイレクトのreturn代わりに使用してくださいrewrite。このユースケースへの私のアプローチは次のとおりです...

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

1
間違いなく読みやすいです。これにより、元のURLにあったクエリも保持されますか?
スティーブエドソン

1
いや。しません。永続的なリダイレクト時にクエリを本当に保持したい場合は、この小さなトリックを参照してください... gist.github.com/pothi/7152399
Pothi Kalimuthu

1
ifはnginxでステートメントを使用するのは悪いと思うのは正しいですか?書き換え方法を使用するよりも、これはさらに良い方法でしょうか?
スティーブエドソン

1
ifreturnディレクティブと一緒に使用しても問題ありません。wiki.nginx.org/IfIsEvilを参照してください。はい、IMO、書き換えを使用するよりも優れています。
ポティカリムトゥ

13

理想的には、回避できる場合はifステートメントを使用しないでください。このような何かが動作する可能性があります(テストなし)。

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

1
それはコンテンツディレクトリ内のすべてをキャッチしませんか?個々のアイテムをリダイレクトしたいだけです。たとえば、コンテンツディレクトリに別のアイテムがありますが、... / another-new-name / unique-page-name2にリダイレクトする必要があります
SteveEdson

1
解決しました。正しくリダイレ​​クトされていることが判明しましたが、スクリプトは後にURLをマングルしてヒットしていました。
スティーブエドソン

1
ああ、私は質問を誤解しました。コンテンツ部分のみを変更したいと思っていました。原則は同じままです。私はあなたのために働いてうれしいです。
ジェビッド

1
問題ありませんが、助けてくれてありがとう、将来的には間違いなくそれを使う必要があります。
スティーブエドソン

12

次のソリューションを使用しました。

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

御Works走。


8

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

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

2
ロケーションブロックはまったく必要ありません。使用するだけrewriteです。@SteveEdisonの回答を参照してください。
PKHunter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.