2011-12-18 9 views
1

Movable TypeからWordPressにかなり大きい(5000+の投稿)を移行しています。この時点で、私は新しいサイトと一緒にライブになれば、古い投稿のURLが404の結果にならないようにしようとしています。Movable TypeからWordPressへの移行:htaccessリダイレクトの問題

古いURLパターンはそうのようになります。

http://domain.com/site/category/category/post_name.php

そして、私は、しかし、私が試したとhtaccessのリダイレクトを試してみました

http://domain.com/category/category/post_name/

にそれらをリダイレクトしたいのですが私が何をしても、それは失敗するか、500エラーを生成します。私は何かばかげた行方不明だと思うし、おそらくは矛盾するルールがあるかもしれないと思うし、私よりもhtaccessをよく知っている人が正しい道に沿って助けてくれることを願っている。

ここに私が今持っているものがあります。ルートディレクトリへの/ site /のリダイレクトはうまく動作しますが、他の2つは単独でも一緒にも影響しません。私は、特定の投稿をリダイレクトできるかどうかを両方調べてみましたが、それを手動で行いましたが、それでも動作しません。

RewriteEngine On 

RewriteRule ^site/(.*) /$1 [NC] 
RewriteRule ^site/resources/(.*).php$ /resources/$1 [NC] 
RewriteRule ^site/resources/research/safe_urban_form_revisiting_the_relationship_b.php$ /resources/research/safe_urban_form_revisiting_the_relationship_b/ [NC] 

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteBase/
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 

非常に便利です。あなたはこのようなリダイレクト何か使用することをお勧めしますように見えます

答えて

0

.は、正規表現の構文では特殊文字であるため、リダイレクトが「任意の文字」を意味します。 .^などの特殊文字は、バックスラッシュ(\.)でエスケープする必要があります。

# BEGIN WordPress 
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/

    # Redirect old URLs with ".php" in them. 
    RewriteRule ^site/(.+)\.php$ $1/ [NC,R=301,L] 

    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.php [L] 
</IfModule> 

# END WordPress 

私はあなたが実際にそこにか、それだけでテストしていた場合RewriteRule ^site/(.*) /$1 [NC]ルールをしたいかはわかりません。場合は、RewriteBase /ステートメントの後に追加してください。

+0

私は実際にそこにサイトと.php固有のルールの両方が必要です。これは動作しました: 'RewriteRule^site /(。+)\ php $ $ 1/[NC、R = 301、L] RewriteRule^site /(.*)/ $ 1 [NC]' *正しく動作するためには、 'RewriteBase /'ステートメントの後ろに置かなければなりませんでした。どうもありがとうございます! – sarah

1

:また

# Redirect /site/any/path/file.php to /any/path/file/: 
RewriteRule ^site/(.+)\.php$ $1/ [NC,R=301,L] 

を、私はすぐにWordpressのセクションでRewriteBase /行の後の最初のルールとしてこれを置くだろう。

+0

ちょっと混乱した後、問題が解決しました(正しく正規表現を書いています)。どうもありがとうございます! – sarah

1

同じドメインを使用するので、自分でリダイレクトルールを書くことを忘れて、代わりにリダイレクトプラグインを使用するのはどうでしょうか?プラグインの助けを借りてリダイレクションルールを定義する方がはるかに簡単です。これは私ができるたびにたどる戦略です

関連する問題