SEDはhtaccessで何千もの301リダイレクトを実行していますか?

SEDはhtaccessで何千もの301リダイレクトを実行していますか?

私のサイトの1つでURLを変更した後に問題が発生しました。 URLは非常に長く、後で.htaccesによる変更にもかかわらずURLを変更することにしました。

一つずつ修正しています。 (URLが1500個を超えています...)

私はこれを持っています:

Redirect 301 /noticies/festes-noticies/diania-roda-les-aixames-la-nit-de-nadal/

これは次のとおりです。

Redirect 301 /noticies/festes-noticies/diania-roda-les-aixames-la-nit-de-nadal/ /diania-roda-les-aixames-la-nit-de-nadal/

/-----/行末の最後にはスペースがあります。

sedまたは他のコマンドを使用してこれを簡単に実行する方法はありますか?

答え1

使用sed:

< input_file sed -E 's#((/[^/]*){2})$#\1 \1#' > output_file
  • /[^/]*スラッシュのないゼロ個以上の文字が、次のスラッシュと一致します。
  • (){2}括弧内に式を2回入れることを意味します。
  • $行の終わりと一致します。
  • 外側は、()内部部品を\1交換部品としてリサイクルできるようにします。
  • #便宜上、この代替では、スラッシュ以外の文字(たとえば)も区切り文字として使用されます。 EREを有効にします-E

答え2

必須ですsedか?

awk -F/ '{printf "%s /%s/\n",$0,$(NF-1)}' old_file > new_file

リダイレクト行でのみ機能し、ファイル全体を書き換えます。

awk -F/ '$1 ~ /Redirect/ {printf "%s /%s/\n",$0,$(NF-1); next ; } {print}' old_file > new_file

どこ

  • -F//awkにフィールド区切り文字として使用するように指示する
  • $0$(NF-1)最後のフィールドの前の行全体です。
  • $1 ~ /Redirect/リダイレクトのある行の選択
  • next次の行に移動
  • {print}暗黙的な印刷ラインの不一致Redirect

編集:元の行が末尾で終わる場合は、/最後のフィールドの前にあるフィールドを選択する必要があります。


一部はawkその場で編集できます( awk -i)。ただし、元のファイルを保存して新しいファイルにバージョンを適用した後、結果に満足したら名前を変更することをお勧めします。

関連情報