301リダイレクト時のhtaccessの書き方について困っています。


ワードプレスからFC2ブログへ301リダイレクトをかけたいのですが、
エックスサーバーのワードプレスのpublic_htmlの中にhtaccessを置き、
下記のように書いたのですが404エラーになってしまいます。

どうしたら301リダイレクト出来るでしょうか。

ワードプレスのurlはhttp://example.jp/?p=記事番号
FC2ブログのurlはhttp://example.blog91.fc2.com/blog-entry-記事番号.htmlです。

記事番号は両方で合わせてあり、書いた内容は以下の通りです。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^/?p=(.*)$ http://example.blog91.fc2.com/blog-entry-$1.html[R=301,L]
</IfModule>

# 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
AddOutputFilterByType DEFLATE text/html text/css application/x-javascript application/javascript text/javascript

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/01/29 12:50:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351

ポイント200pt

次のようにする事でリダイレクトします。(※2行追加)

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# 記事IDは数字なので、数字に限定する場合は次の行を「RewriteCond %{QUERY_STRING} ^p=([0-9]+)$」とします。
RewriteCond %{QUERY_STRING} ^p=(.+)$
RewriteRule ^$ http://example.blog91.fc2.com/blog-entry-%1.html? [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
AddOutputFilterByType DEFLATE text/html text/css application/x-javascript application/javascript text/javascript


http://blog.bumberboom.net/archives/monthly/2011_09/query-redirect.php

で、本題ですが、要は
(1) http://www.hoge.com/?page_id=1
のようなURLを
(2) http://www.hoge.com/fuga/
みたいなURLにリダイレクトする方法です。

~(略)~

RewriteCond %{QUERY_STRING} ^page_id=1$
RewriteRule ^$ /fuga/? [R=301,L]

「RewriteEngine On」の記述は既にWPが吐いているので必要ありません。
ポイントは2行目の「/fuga/」の後にある「?」です。
これをつけないと、クエリを引き継ごうとしてしまいます。



※301リダイレクトや404等を返すURLはインデックスしないはずですので、インデックスから消えた事と、アクセスするユーザーがいない事を(アクセス解析等で)確認したら、新ブログは削除してかまわないと思います。

他15件のコメントを見る
id:ringomaru

私はグーグルアナリティクスとQLOOKアクセス解析を使っています。
グーグルアナリティクスにはリファラーという項目がありましたが、
一ページずつ確認しないと、参照元がWPの方なのか確認できませんでした。
もっと簡単に確認できる方法はありますか?
質問を閉じているのに図々しいですがお分かりでしたら、ご紹介いただけると幸いです。

2013/01/30 10:38:22
id:rouge_2008

※誤字訂正と追記をしてサイドコメントしています。

> 一ページずつ確認しないと、参照元がWPの方なのか確認できませんでした。

リダイレクトの場合、やはり移転元は表示されないのかもしれませんね。
はてなカウンター(※有料サービス)の場合、「サイトトップ」→「リダイレクトするページ」→「移転先」でアクセスした場合に「サイトトップ」が、「サイトトップ」→「アーカイブ」→「リダイレクトするページ」→「移転先」でアクセスした場合には「アーカイブ」のURLが記録されましたので、ステータス200で正常に表示されるページが記録される仕組みに見えます。
※「ログ」で1ページずつ、サイト全体では「リンク元」で確認できる仕様です。
グーグルアナリティクスは使用していないので分かりませんが、検索結果のページ(※移転先ではなく移転元だけが結果に表示されるページ)の記録がないでしょうか?
リファラーの項目に移転元のWordPressのURLが記録されているページは、サイト内移動をしてからリダイレクトされるページにアクセスしたのかもしれません。(※アクセスが記録された(※移転先の)ページと対になるURLでしたか?トップページやアーカイブなど、おそらく別のページのURLではないかと思うのですが・・・)
グーグルアナリティクスやその他の解析サービスも、リファラー(リンク元)の確認については、はてなカウンターと同様の仕組みかもしれません。

リダイレクト元を除外せず記録するアクセス解析については心当たりがありません。


※追記

既に対策済みかもしれませんが、今後はWordPressのサイトがインデックスされないように、メタタグで「noindex」等を指定するなど、何か対処しておいた方がいいかもしれませんね。

2013/01/30 17:37:18

その他の回答2件)

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320

# BEGIN WordPress 以降に記述されている RewriteRule の文法が間違っています。
どのような転送を望んでいるのか分からないので、具体的な指摘はできません。

id:ringomaru

ご回答ありがとうございます。
# BEGIN WordPress 以降に記述されている部分はワードプレスで自動的に書き込まれた元々入っている.htaccessに記載されていた内容です。
この部分は消していいのか分からないため、そのまま残して上の部分に
やりたい転送を追記しましたが消しても構いません。

実際に行いたいのは
ワードプレス側の個別記事(http://example.jp/?p=記事番号)から
FC2ブログ側の個別記事(http://example.blog91.fc2.com/blog-entry-記事番号.html)への転送です。

元々fc2ブログでブログをやっていたものをワードプレスへ移転したのですが、やはり元に戻したいのです。

一部の記事の検索結果が新ブログの方のアドレスに切り替わってしまっているので、
301リダイレクトで旧ブログの方に転送したいのです。

2013/01/28 07:21:17
id:ringomaru

ちなみにトップページ以外はだんだんと検索結果が入れ替わっている感じで
新ブログにもアクセスがあるので、出来れば元のブログに301リダイレクトして、
新ブログの方はリダイレクトさえ出来れば削除したいと思っています。

2013/01/28 10:54:16
id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351ここでベストアンサー

ポイント200pt

次のようにする事でリダイレクトします。(※2行追加)

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# 記事IDは数字なので、数字に限定する場合は次の行を「RewriteCond %{QUERY_STRING} ^p=([0-9]+)$」とします。
RewriteCond %{QUERY_STRING} ^p=(.+)$
RewriteRule ^$ http://example.blog91.fc2.com/blog-entry-%1.html? [R=301,L]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
AddOutputFilterByType DEFLATE text/html text/css application/x-javascript application/javascript text/javascript


http://blog.bumberboom.net/archives/monthly/2011_09/query-redirect.php

で、本題ですが、要は
(1) http://www.hoge.com/?page_id=1
のようなURLを
(2) http://www.hoge.com/fuga/
みたいなURLにリダイレクトする方法です。

~(略)~

RewriteCond %{QUERY_STRING} ^page_id=1$
RewriteRule ^$ /fuga/? [R=301,L]

「RewriteEngine On」の記述は既にWPが吐いているので必要ありません。
ポイントは2行目の「/fuga/」の後にある「?」です。
これをつけないと、クエリを引き継ごうとしてしまいます。



※301リダイレクトや404等を返すURLはインデックスしないはずですので、インデックスから消えた事と、アクセスするユーザーがいない事を(アクセス解析等で)確認したら、新ブログは削除してかまわないと思います。

他15件のコメントを見る
id:ringomaru

私はグーグルアナリティクスとQLOOKアクセス解析を使っています。
グーグルアナリティクスにはリファラーという項目がありましたが、
一ページずつ確認しないと、参照元がWPの方なのか確認できませんでした。
もっと簡単に確認できる方法はありますか?
質問を閉じているのに図々しいですがお分かりでしたら、ご紹介いただけると幸いです。

2013/01/30 10:38:22
id:rouge_2008

※誤字訂正と追記をしてサイドコメントしています。

> 一ページずつ確認しないと、参照元がWPの方なのか確認できませんでした。

リダイレクトの場合、やはり移転元は表示されないのかもしれませんね。
はてなカウンター(※有料サービス)の場合、「サイトトップ」→「リダイレクトするページ」→「移転先」でアクセスした場合に「サイトトップ」が、「サイトトップ」→「アーカイブ」→「リダイレクトするページ」→「移転先」でアクセスした場合には「アーカイブ」のURLが記録されましたので、ステータス200で正常に表示されるページが記録される仕組みに見えます。
※「ログ」で1ページずつ、サイト全体では「リンク元」で確認できる仕様です。
グーグルアナリティクスは使用していないので分かりませんが、検索結果のページ(※移転先ではなく移転元だけが結果に表示されるページ)の記録がないでしょうか?
リファラーの項目に移転元のWordPressのURLが記録されているページは、サイト内移動をしてからリダイレクトされるページにアクセスしたのかもしれません。(※アクセスが記録された(※移転先の)ページと対になるURLでしたか?トップページやアーカイブなど、おそらく別のページのURLではないかと思うのですが・・・)
グーグルアナリティクスやその他の解析サービスも、リファラー(リンク元)の確認については、はてなカウンターと同様の仕組みかもしれません。

リダイレクト元を除外せず記録するアクセス解析については心当たりがありません。


※追記

既に対策済みかもしれませんが、今後はWordPressのサイトがインデックスされないように、メタタグで「noindex」等を指定するなど、何か対処しておいた方がいいかもしれませんね。

2013/01/30 17:37:18
id:pretaroe No.3

回答回数531ベストアンサー獲得回数75


Wordpressのリダイレクトプラグイン
http://downloads.wordpress.org/plugin/redirection.zip

を導入して、その中で設定するほうが楽だと思います。
正規表現もOKです。

使い方も検索すれば出てくるかと思います。

ドメインが違うところへも転送できます。

id:ringomaru

ご回答ありがとうございます。
残念ながらワードプレス3.50では使えないプラグインのようです。

2013/01/28 16:13:09

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません