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/
からの直接の引用落とし穴とよくある間違い:課税の書き換え :
Returnディレクティブを使用することで、正規表現の評価を完全に回避できます。
永続的なリダイレクトには、return
ではなくrewrite
を使用してください。これがこのユースケースへの私のアプローチです...
location = /content/unique-page-name {
return 301 /new-name/unique-page-name;
}
可能であれば、ifステートメントを使用しないでください。このようなものが機能する可能性があります(テストされていません)。
location ~ /content/(.*)$ {
rewrite ^ /new-name/$1?$args permanent;
}
私は次の解決策を使用しました:
rewrite ^(/content/unique-page-name)(.*)$ http://sitedomain.co.uk/new-name/unique-page-name/$2 permanent;
御馳走を働きます。
私にとっては、次のように等号なしで機能しました:
location /old-url {
return 301 /new-url;
}