パーマリンク構造の変更-HTACCESSのリダイレクトはアーカイブリンクを破壊します
-
16-10-2019 - |
質問
私がブログを始めたとき、パーマリンクと次の構造:
http://<domain>/%year%/%monthnum%/%day%/%postname%/
しばらく前に、私はパーマリンク構造を変更しました」http://<domain>/%postname%/
" それだけ。
古いパーマリンク構造への外部リンクに取り組むために、htaccess-fileに次の行を追加しました。
RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://<domain>/$4
問題は、リダイレクトラインがアーカイブリンクを破壊することです。 「http://<domain>/2010/09/02
「2010年9月2日からの投稿を表示する代わりに、フロントページにリダイレクトされます。
htaccessでリダイレクト指令を修正することは可能ですか、それともケーキを食べてそれを持っていることもできないでしょうか?
解決
mod_aliasのリダイレクトマッチは、mod_rewriteほど強力ではありません。ホストにmod_rewriteがある場合(たとえば、Permalinksがそれを使用します)、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]
これはテストされていませんが、私はそれが仕事をするべきだと思います。 Quantifier({2})を使用して、期待する数値をよりよく指定しました。その隣には、rewitecondで20 ..と19年のみに一致するパターンを作成しました。
最初の行(条件、 RewriteCond
)Archive-URLと一致しないことをチェックし、一致しない場合にのみ、リダイレクトを行うルールが実行されます。 RewriteRule
基本的にあなたと同じことをしています RedirectMatch
指令。