Joomla 1.5 SEF URLからWordPress SEF URLに移行しようとしています。
古いリンクは次の形式を使用します:/site/sectionname/categoryname/id-titlename.html
/wp/index.php?p=id
に移行したい
.htaccessファイルを変更しましたが、機能していないようです。
RewriteEngine on
RewriteRule ^/(.*)/(.*)/[0-9]+-(.*)$ /index.php?p=$3 [L]
誰も私がこの問題を解決する方法を知っていますか?.
正規表現には次の問題があります。
.*
しかありませんが、「カテゴリ名」には1つありません。例に基づいて、正規表現に3番目のディレクトリレベルが必要です。([0-9]+)
.*
よりも文字クラスを使用する方が良いでしょう。ドットは貪欲で、次のスラッシュを含むすべてに一致します。複数の.*
sで記述された正規表現では、正規表現エンジンが追加の「バックトラッキング」作業を多く行う必要があります。正規表現は、期待どおりに機能しません。.
の.html
は、リテラルのピリオドだけでなく、任意の文字に一致します。次の場所で.
をエスケープする必要があります:\.html
.htaccess
を対象としている場合、正規表現はスラッシュで始まってはならず、.htaccess
のコンテキストで開始スラッシュが想定されます。書き換えルールは、/
に入るときにのみhttpd.conf
で始まる必要があります[L]
を[L,R=301]
に変更する必要があります以下は、より適切に機能する正規表現です。これは、文字、数字、アンダースコア、ダッシュのみがカテゴリ、タイトルなどに表示されることを前提としています。
RewriteEngine on
RewriteRule ^[a-zA-Z0-9_\-]+/[a-zA-Z0-9_\-]+/[a-zA-Z0-9_\-]+/([0-9]+)-[a-zA-Z0-9_\-]+\.html /index.php?p=$1 [L]
また、Timothyの答えに記載されているリダイレクトプラグインにこの正規表現を入れてみることもできます。
現在Wordpressを使用していて、単に古いJoomlaのURLを新しいURLにリダイレクトしようとしている場合は、プラグインを使用して生活を楽にすることをお勧めします。
私はこのプラグインをたくさんお勧めします:
http://wordpress.org/extend/plugins/redirection/
また、標準のID番号の代わりにWordpress内で派手なパーマリンクを使用する必要があることに注意してください。この設定は、wp-adminの[設定]オプションにあります。
Rewriteルールを少し変更して、投稿IDをキャプチャして渡すことで、この特定の問題を解決できると思います。現在、IDを渡す必要があるときに投稿のタイトルを渡します。
RewriteEngine on
RewriteRule ~/.*/.*/([0-9]+)-.*$ /index.php?p=$1 [L]