web-dev-qa-db-ja.com

Nginx:.htmlサフィックスを削除した後、すべてのリクエストを新しいURLにリダイレクトするにはどうすればよいですか?

古いMagentoショップシステムのリンク構造を最適化したい。これまで、静的ページを生成するときに、対応するパスに.htmlサフィックスが追加されていました。以前の問題により、サフィックスが2つ付いたパスも存在していました(例:.html.html)。サフィックスの使用を無効にし、サフィックスが2つあるすべてのパスをデータベースから削除したので、古いURLから新しいURLへの自動リダイレクトを設定します。

既存のハイパーリンクと検索エンジンエントリを保持するために、Nginxが.htmlまたは.html.htmlサフィックスを持つページのすべてのリクエストを新しいパスにリダイレクトするようにします。

リクエスト先:

example.org/banana.html
example.org/banana.html.html

リダイレクトする必要があります:

example.org/banana

だから実際の私の最善の推測は:

location / {
  rewrite ^(.*?)\.html(\.html)?$ $1 permanent;
  try_files $uri $uri.html $uri.html.html $uri/ =404;
}

目標を達成するにはどうすればよいですか?また、nginx構成に追加する必要がある書き換えルールは何ですか?

1
max stern

locationブロック内で使用するtry_filesステートメントは1つだけです。 file用語は必要に応じて追加できます。静的ファイルに直接一致するURIに一致する$uri用語を含めます(例:.cssおよび.js)。 indexディレクティブを使用する場合は、$uri/用語を含めます。

例えば:

try_files $uri $uri.html $uri.html.html $uri/ =404;

詳細については、 このドキュメント を参照してください。


rewriteステートメントは、最初のステートメントが常に2番目のステートメント用のURIと一致するため、間違った方法です。また、リライトは/変数の先頭の$1をキャプチャしているため、/$1を使用すると、先頭の/が追加されます。

次に、両方の正規表現を1つのステートメントに結合することもできます。

rewrite ^(.*?)\.html(\.html)?$ $1 permanent;
0
Richard Smith