• 解決済 nzbambam

    (@nzbambam)


    はじめまして。
    いろいろ調べてみましたが、どうしても解決できず質問させていただきました。

    現在公開しているサイトを英語で作っているので、同じ内容を日本語で作ろうと思い、
    現状のサイトのデータとデータベースを丸ごとバックアップをとり、別途フォルダを作ってサイトを移行するような形でバックアップしたデータとデータベースを復元させました。
    (一度まったく同じ状態のサイトを作り、後からテキストのみ日本語に訳して行く予定で)

    サイト構成は下記のようになっています。

    ●トップページ(英語のサイト)
     http://www.aaa.com/

     ※WPは実際にはhttp://www.aaa.com/en/に入れており、
      一般設定で下記のようにしています。
      WordPress のアドレス (URL):http://www.aaa.com/en
      サイトのアドレス (URL):http://www.aaa.com/

    ●問題が起きている日本語のサイト
     http://www.aaa.com/jp/
     ※http://www.aaa.com/en/の内容を/jp/フォルダに復元

    DBのエクスポート・インポートはphpmyadminより行い、特にエラーが出る事もなく
    復元する事ができ、ダッシュボード内の投稿数や、実際の投稿記事、投稿のアドレスなどを見ても特に問題はありません。

    しかし、実際に投稿した記事をブラウザで表示させると、
    編集画面のタイトル部分の下にありますパーマリンク(記事などのURL)とは違うアドレスで表示されてしまい困っています。

    例えば
    http://www.aaa.com/jp/text1/
    というアドレスでつくった記事のはずが、そのページを表示すると
    http://www.aaa.com/text1/
    と、元々の英語のページのアドレスで表示されてしまいます。

    ただしhomeページだけは、正常にhttp://www.aaa.com/jp/というアドレスで表示されていまして、それ以外全てのページに置いて同じ現象です。

    homeページ(http://www.aaa.com/jp/)で表示されていますnavi menuで示すリンク先をソースで確認すると、問題なくhttp://www.aaa.com/jp/text1/というアドレスを示していますが、クリックするとhttp://www.aaa.com/test1/にリダイレクトされてしまっているような感じです。

    データベースを移行する際に、エクスポートしたファイル内のhttp://www.aaa.com/en/に関する部分をhttp://www.aaa.com/jp/に変更したので、その変更の仕方に問題がありそうですが、データベースには詳しくありませんので、復元したデータベースの値を見てもちょっとよく分かりませんでした。

    どなたかこのような現象を見て、原因が分かる方おりますでしょうか?

    宜しくお願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック投稿者 nzbambam

    (@nzbambam)

    書き忘れましたが、wordpressのバージョンは3.1.1です。
    宜しくお願いします。

    ども

    同じサーバーに、(マルチサイトではない)wordpressを2つインストール
    して、動かそうとしているということでしょうか?

    だとすれば、データベースをインポートする前に、
    1.データベースを分ける(もしくは接頭辞を変える)
    2.データベース内のサーバ上でのディレクトリ位置のデータを書き換える
    3.データベース内のURLを書き換える
    最低限この3つを行っていなければ、2つのサイトのデータがごっちゃになって
    しまいます。これらはきちんと書き換え・設定されていますか?

    そのほかにも、.htaccessファイルが適切に設定されていないと
    意図したとおりに動かない可能性があります。
    これらを確認されたほうがよいかと。

    ※老婆心ながら・・・
    aaa.comドメインのオーナーでない限り、URLの例示するために実在のドメインを勝手に使用するべきではありません。URLの例示には、例示用のexample.com, example.net, example.org ドメインや、example.jpドメインを使いましょう。

    トピック投稿者 nzbambam

    (@nzbambam)

    aimaimさん

    ご返答ありがとうございます。
    また、URLの例示の仕方ご指導いただきありがとうございます。
    勉強になります。

     >同じサーバーに、(マルチサイトではない)wordpressを2つインストール
     >して、動かそうとしているということでしょうか?

    そうです。マルチサイトではなく、同じサーバー(ドメイン)にwordpressを
    二つインストールして動かす予定です。

     >だとすれば、データベースをインポートする前に、
     >1.データベースを分ける(もしくは接頭辞を変える)
     >2.データベース内のサーバ上でのディレクトリ位置のデータを書き換える
     >3.データベース内のURLを書き換える
     >最低限この3つを行っていなければ、2つのサイトのデータがごっちゃになって
     >しまいます。これらはきちんと書き換え・設定されていますか?

    インポートはこのフォーラムの「新しいサーバへの引越し」
    http://wpdocs.sourceforge.jp/Moving_WordPress
    を参考に、エクスポートしたファイルの英語サイトのアドレス部分を日本語サイトのアドレスに置き換えはしています。

    ただ、教えていただいた上記の3つが出来ているのかどうなのか、、、

     >1.データベースを分ける(もしくは接頭辞を変える)
    に関しては、一応別phpmyadminでは同じログインですが、その中で英語サイトは_blog、日本語サイトは_jpと別の接頭辞(?)を使っています。

     >2.データベース内のサーバ上でのディレクトリ位置のデータを書き換える
    に関しては、知識不足でどこを確認すればこれが出来ているのか分かりません。
    phpmyadmin上などで確認は出来ますか?

     >3.データベース内のURLを書き換える
    これは出来ていると思います。

     >そのほかにも、.htaccessファイルが適切に設定されていないと
     >意図したとおりに動かない可能性があります。

    .htaccessファイルを確認したところ、英語サイトでは

    AddHandler x-httpd-php5 .php .phps

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

    # END WordPress
    # 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

    とあり、
    新しく追加した日本語サイトでは

    # BEGIN WordPress

    # END WordPress

    となっていました。

    サイトのルートディレクトリにある英語サイトの.htaccessファイルの内容が
    以前のものとちょっと書き変わってしまっているような気がしますが、
    ここらへんが原因なのでしょうか?

    トピック投稿者 nzbambam

    (@nzbambam)

    調べてみたところ、インポートする前の.htaccessは

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

    # END WordPress

    となっていました。これが自動的にインポート後に書き変わっているようです。

    nzbambamさん

    おそらく、.htaccessが適切に設定されていないことが主な原因と思われますが、
    念のため、他の事もひとつづつ確認しますね。

    ■バックアップ

    インポートする前のデータをお持ちのようなので、大丈夫だと思いますが、
    万一、設定を誤ったときに、最初の状態に戻せるように、もしバックアップを
    とっていなければ、/enも、/jpも両方バックアップを取っておいてください。

    ■接頭辞

    –仕組みの話–
    wordpressを同じデータベースサーバーに2つインストールすると、データがごっちゃになってしまう可能性があります。これを防ぐには、いくつか方法がありますが、そのうちの1つが接頭辞を変えるという方法です。

    wordpressではwp_options, wp_posts, wp_usersなどのようにいくつかのデータベースのテーブルを使っていますが、wp_の部分を接頭辞といって、ここを2つのwordpressで別々のものにすることで、データが混ざらないようにします。

    wp-config.phpの
    $table_prefix = 'wp_';
    の部分で、設定します。
    たとえば、wp-config.phpで接頭辞を’jp_’に設定したら、wordpressは、jp_options, jp_posts, jp_usersなどのように、jp_で始まるテーブルにあるデータを使います。

    さて、nzbambamさんの環境では、 ‘_blog’と ‘_jp’にされているようなので、
    英語版用のwordpressのwp-config.phpに$table_prefix = '_blog';が設定されていて、phpmyadminで見たテーブル名が_blogoptions, _blogposts, _blogusersのようになっていますか?
    また、日本語版用のwordpressのwp-config.phpに$table_prefix = '_jp';が設定されていて、phpmyadminで見たテーブル名が_jpoptions, _jpposts, _jpusersのようになっていますか?

    このようになっていれば、データベースのデータはごっちゃになってはいません。

    ■ディレクトリ位置のデータ

    サーバー環境や使っているプラグインによって変わるので、説明が難しいです。

    インポートに使った.sqlファイルをテキストエディタで開いてみて、
    optionsテーブル(_jpoptions)などに、/wordpressのインストールディレクトリ/en
    のようなデータがないか、検索してみてください。

    お使いのプラグインなどの環境によるので、ひょっとしたら1つもないかもしれませんし、大量に数十個あるかもしれません。

    もしあるようなら、URLを書き換えたときのように、/en/を/jp/に置換して、インポートしなおしてください。
    誤って別のものを置換してしまうことを避けるため、念のため、上位のディレクトリも入れて置換してください。
    たとえば、/public_html/example.com/en/のようになっていたら、/public_html/example.com/en/を/public_html/example.com/jp/に置換してください。
    そうすれば、たまたま/en/のように書いてある別のデータまで置換されることを防ぐことができます。

    ※データベースをインポートしなおすと、データが上書きされます。
    もし、/jpのほうに記事などを書き加えているようならば、一度データベースのバックアップを取ってから、置換して、インポートしてください。

    wordpressのサイトに公式にはこの作業は書いていないため、やらなくても良いかもしれません。ただ、今回は同じサーバの別ディレクトリに移すため、やっておいたほうが良いと思います。

    ■.htaccessファイル

    英語サイトの.htaccessにRewriteRuleが2つ書かれているのが、明らかにおかしいですね。

    最終的に、どうさせたいか確認ですが、
    http://example.com/にアクセスしたときは/enのwordpressのトップページが表示されて、http://example.com/jpにアクセスしたときは、日本語用のwordpressのトップページが表示されるということでいいですか?

    以下、それでよいという前提で

    /jpの管理画面の、設定>一般設定で、
    WordPress のアドレス (URL):http://example.com/jp
    サイトのアドレス (URL):http://example.com/jp
    で設定してください。

    その後、http://example.com/(英語版)の.htaccessを元に戻してください。つまり、

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

    にします。
    もし必要ならAddHandler x-httpd-php5 .php .phpsも最初に書いておいてください。

    次に、/jpのディレクトリにある、.htaccessを書き換えます。

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

    最後に、/en と/jpの両方の動作を確認してみてください。

    トピック投稿者 nzbambam

    (@nzbambam)

    aimaimさん

    とても詳しくご指導していただきありがとうございます!
    web siteの制作には長年関わっているのですが、プログラム関係はプログラマさんに全てお願いしていたので、データベース関連やサーバーのことは任せっきりで知らない事だらけでしたので、丁寧に分かりやすく書いていただき、とても助かりました。

    ■接頭辞

    こちら、接頭辞自体の意味が間違えていました。
    _jp/_blogと書いたのは、データベース名のところの事でした。

    同じデータベースという意味の私の解釈が間違えているのかもしれませんが、
    一つのphpmyadminにログインすると、_jpと_blog(実際にはあと3つぐらいデータが入っているのですが)二つのデータベースが入っていて、その中にそれぞれwp_options, wp_posts, wp_usersといったテーブルが入っている状態です。

    なので、おそらく同じテーブル名でも、参照しているデータベースが違うので、ごちゃまぜにはなっていと思います。

    ちなみに、サーバーはエックスサーバーです。

    次に
    ■ディレクトリ位置のデータ
    に書いてあった内容は、始めのエクスポートの際に置き換え済みでした。

    ということで、一番怪しい
    ■.htaccessファイル を参考に書き換えた結果、無事正常に表示されました!

    明らかにおかしそうな、英語サイトの.htaccessにRewriteRuleが2つ書かれている部分を
    始めのものに戻しただけでは、正常に動作しませんでしたが、何も書かれていなかった日本語サイトのほうの.htaccessを書き直しましたら、正常に動くようになりました。

    もともと、/jpの管理画面の、設定>一般設定で、
    WordPress のアドレス (URL):http://example.com/jp
    サイトのアドレス (URL):http://example.com/jp
    としてありました。

    .htaccessは、一般設定のアドレス部分を変更等したら、自動的に書き変わるものと思っていましたが、そうではないのでしょうか。
    ただ、もしかしたら今回はエクスポートした際にここがデータベース上でhttp://example.com/jpに下記変わったので、.htaccessには反映されなかったのかもしれません。(一応その可能性も考えて、今回書き直す前に一般設定を更新したのですが…)

    原因は、http://example.com/jpのほうの.htaccess設定でした。

    このたびは詳しく教えていただき、本当にありがとうございました!

    nzbambamさん

    ■接頭辞

    それぞれ別のデータベース使っているのですね。
    ならば、現状のままで、お考えの通り、ごっちゃにならないので大丈夫です。

    ■.htaccessファイル

    wordpressが.htaccessファイルを書き換えるのは、おそらく
    一般設定のアドレス部分を正しく設定した状態で、設定>パーマリンク設定を変更したときではないかと思います。

    今回は、ちょっと普通の使い方とは異なるので、誤作動というか、想定外の動作に
    なって、別のディレクトリの.htaccessを書き換えてしまったようですね。

    無事に動いたようで、何よりです~。

    ではまた

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「編集画面のパーマリンクのアドレスと違うアドレスで表示されてしまう」には新たに返信することはできません。