web-dev-qa-db-ja.com

パーマリンク構造の変更 - 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でリダイレクトディレクティブを修正することは可能ですか、それとも私はケーキを食べてそれを持つことができないでしょうか?

2
TFM

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ディレクティブと同じことをしています。

2
hakre