質問: パーマリンク構造の変更 - htaccessのリダイレクトはアーカイブリンクを壊す ブログを始めたとき、パーマリンクと次のような構造がありました。http://<domain>/%year%/%monthnum%/%day%/%postname%/ しばらく前に、私はパーマリンク構造を "http://<domain>/%postname%/"だけに変更しました。古いパーマリンク構造への外部リンクに取り組むために、私は私のhtaccessファイルに次の行を追加しました:redirectmatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://<domain>/$4 今問題はリダイレクト行がアーカイブリンクを壊すことです、例えば。 2010年9月2日からの投稿を表示する代わりに、 "http://<domain>/2010/09/02"がフロントページにリダイレクトされます。htaccessでリダイレクトディレクティブを修正することは可能ですか、それとも私はケーキを食べてそれを持つことができないでしょうか?
回答: mod_aliasのredirectmatchは、mod_rewriteほど強力ではありません。あなたのホストにmod_rewriteがある場合(例えば、かなりパーマリンクはそれを利用します)、urlがアーカイブリンクフォーマットではない場合にのみリダイレクトを行うことができます。その場合をテストするには、 rewritecond があり、リダイレクトコマンドを作成するには、 rewriterule ... [r=301] ディレクティブがあります。あなたのデータに基づく例:rewritecond %{request_uri} !^/((20|19)[0-9]{2})/([0-9]{2})/[0-9]{2}$ [nc] rewriterule ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*)$ http://<domain>/$4 [r=301,l] これは未検証ですが、私はそれが仕事をするべきだと思います。何個の数値を必要とするかをより明確に示すために、数量詞({2})を使用しました。 rewritecondのそれの隣に私は20と19年だけにマッチするパターンを作成しました。最初の行(条件rewritecond)はarchive-urlと一致しないことを確認し、一致しない場合にのみ、リダイレクトを実行するための規則が実行されます。 rewriteruleは基本的にあなたのredirectmatchディレクティブと同じことをしています。