Mixhost 解決 トップページしかリダイレクトされない

Mixhostリダイレクト問題解決ブログ開設

Mixhostのリダイレクト設定

Mixhostに独自ドメインを設定すると、3つの異なるURLで同じ内容が表示されるために、リダイレクト設定をする必要があります。そのリダイレクトの設定方法は以前のブログで紹介しました。

Mixhost ドメインのリダイレクト設定
Mixhostに独自ドメインを追加した結果、3つのURLで同じコンテンツにアクセスできる状態になりました。これをリダイレクト設定することで、ひとつのURLに統一することができました。その作業手順を残しておきます。
mixhost

問題発生

dash64
dash64

当初リダイレクトがうまくいったと思っていたのですが、問題が発生していることに気が付きました。

ドメイン統一作業の内容

リダイレクトの目的は以下のように3つのURLをひとつにまとめることです。.htaccessファイルを編集する知識もありませんでしたので、リダイレクト作業は、cPanelから作業を行いました。その作業内容も上記ブログに記載してあります。【内部リンク】ドメインのリダイレクト設定

  1. http(s)://(www.)abc.mixh.jp(初期ドメイン)
  2. http(s)://(www.)example.com(追加した独自ドメイン)
  3. http(s)://(www.)example.abc.mixh.jp(独自ドメイン追加時に登録されたサブドメイン)

https://example.com(SSL対応、wwwなし)

トップページしかリダイレクトされていない

設定終了後の確認作業では、ブラウザーで確認してもリダイレクトチェッカーサイトで確認しても、正しくリダイレクトされていました。

しかし、上記3番のサブドメインでは、トップページしかリダイレクトされておらず、各記事については元のドメインのまま表示されていました。

整理すると以下のようになります。

トップページ記事ページ
1. 初期ドメインリダイレクトOKリダイレクトOK
2. 独自ドメインリダイレクトOKリダイレクトOK
3. サブドメインリダイレクトOKリダイレクトNG

3番のサブドメインだけに問題が出ています。具体的には以下のような現象です。

(トップページ、問題なし)
http://example.abc.mixh.jp
→ https://example.com/

(記事ページ、問題あり)
http://example.abc.mixh.jp/blog01
→ https://example.abc.mixh.jp/blog01

Mixhostのサポートへ相談

cPanelから設定した結果なので、Mixhostに問い合わせれば何らかの解決方法が分かるだろうと思いメールを送りました。しかし、具体的な解決方法は得られませんでした。

cPanelの仕様上、cPanelから追加できるリダイレクト機能
につきましては、単純なリダイレクトのみとなり、複雑な条件
付けなどを設定することができかねますため、個別ページへの
リダイレクトをご希望の際は、.htaccessでのご対応を
お願いしている次第でございます。

今回のリダイレクト設定が複雑だとは思いませんが、サポート対象外のようです。

mixhost

やむなく.htaccessファイルを覗く

.htaccessファイルを編集する際には、必ずバックアップを取って、不具合が発生した際に以前のファイルに戻せるようにしておく必要があると思われます。

このブログを元に操作した結果、問題が発生しても何ら責任を取れませんので、ご了承ください。

Mixhostファイル構造

Mixhostへftpで接続したところ以下のようなファイル構造になっていました。

/public_html/example.com

public_htmlフォルダー内とexample.comフォルダー内に、それぞれ.htaccessファイルが存在しています。

初期ドメインのリダイレクト操作と.htaccessファイル

初期ドメインのリダイレクト設定に関連する.htaccessファイルは、public_htmlフォルダー内に存在しています。

cPanelから初期ドメインのリダイレクト設定をしましたが、その結果.htaccessファイルは以下のようになっていました。

RewriteEngine on
Options -Indexes
RewriteCond %{HTTP_HOST} ^abc\.mixh\.jp$ [OR]
RewriteCond %{HTTP_HOST} ^www\.abc\.mixh\.jp$
RewriteRule ^/?$ "https\:\/\/example\.com\/" [R=301,L]
dash64
dash64

なんとなく、分かったような分からないような、、、

この初期ドメインの設定は、正しいリダイレクト結果になっていましたので、何もしないでおきます。

独自ドメインのリダイレクト操作と.htaccessファイル

気になるのはこちらです。独自ドメインのリダイレクト設定に関連する.htaccessファイルは、example.comフォルダー内に存在しています。

同じく、cPanelから初期ドメインのリダイレクト設定をしましたが、その結果.htaccessファイルは以下のようになっていました。

これを見る限りでは、サブドメインのリダイレクト設定の結果もここに書き込まれています

<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*)$ "https\:\/\/example\.com\/$1" [R=301,L]
RewriteCond %{HTTP_HOST} ^example\abc\.mixh\.jp$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.abc\.mixh\.jp$
RewriteRule ^(.*)$ "https\:\/\/example\.com\/$1" [R=301,L]
</IfModule>
dash64
dash64

これを見てすぐに問題点が分かる人が羨ましいです。試行錯誤してなんとかうまくリダイレクトできるようになりました。

結局、以下のようにして問題が解決しました。

<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-SSL} !on
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^example\.abc\.mixh\.jp$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.abc\.mixh\.jp$
RewriteRule ^(.*)$ "https\:\/\/example\.com\/$1" [R=301,L]
</IfModule>

解決方法

私がやったことは、2つです。

  1. 2つ存在していたRewiteRuleのうち一つ(上にあるもの)を削除
  2. RewriteCondを[OR]でつなげた

下の引用部の6行目と9行目が同じ内容になっています。リダイレクト先のURLです。これが重複しているので6行目をまるまる削除しました

その結果、5行目と7行目のRewriteCondが繋がらなくなるので、5行目の最後に [OR]を付け加えました

1 <IfModule mod_rewrite.c>
2 RewriteCond %{HTTPS} off
3 RewriteCond %{HTTP:X-Forwarded-SSL} !on
4 RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
5 RewriteCond %{HTTP_HOST} ^www\.example\.com$ [OR]
6 RewriteRule ^(.*)$ "https\:\/\/example\.com\/$1" [R=301,L]
7 RewriteCond %{HTTP_HOST} ^example\abc\.mixh\.jp$ [OR]
8 RewriteCond %{HTTP_HOST} ^www\.example\.abc\.mixh\.jp$
9 RewriteRule ^(.*)$ "https\:\/\/example\.com\/$1" [R=301,L]
10 </IfModule>

編集した.htaccessファイルをアップロードしてすべて解決しました。以下のリダイレクトがトップページのみならず、個々の記事ページでもリダイレクトされていることが確認できました。

  1. http(s)://(www.)abc.mixh.jp(初期ドメイン)
  2. http(s)://(www.)example.com(追加した独自ドメイン)
  3. http(s)://(www.)example.abc.mixh.jp(独自ドメイン追加時に登録されたサブドメイン)

https://example.com(SSL対応、wwwなし)

cPanelの操作と.htaccessファイルへの影響

もう少し理解するために

せっかくなので、独自ドメイン(/public_html/example.com)のフォルダーにあった、問題解決前の.htacessファイルの中身を調べてみました。

1 <IfModule mod_rewrite.c>
2 RewriteCond %{HTTPS} off
3 RewriteCond %{HTTP:X-Forwarded-SSL} !on
4 RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
5 RewriteCond %{HTTP_HOST} ^www\.example\.com$
6 RewriteRule ^(.*)$ "https\:\/\/example\.com\/$1" [R=301,L]
7 RewriteCond %{HTTP_HOST} ^example\abc\.mixh\.jp$ [OR]
8 RewriteCond %{HTTP_HOST} ^www\.example\.abc\.mixh\.jp$
9 RewriteRule ^(.*)$ "https\:\/\/example\.com\/$1" [R=301,L]
10 </IfModule>

独自ドメインのリダイレクト設定

cPanelで独自ドメインのリダイレクト設定の内容は以下の通りです。

http(s)://(www.)example.com → https://example.com

これは.htaccessファイルの2〜6行目に反映されています。

SSL対応(https)でなくて、wwwの有無に係わらず、https://example.comにリダイレクトする記述になっています。

サブドメインのリダイレクト設定

cPanelでサブドメインのリダイレクト設定の内容は以下の通りです。

http(s)://(www.)example.abc.mixh.jp → https://example.com

これは.htaccessファイルの2、3、7〜9行目に反映されています。2、3行目は独自ドメインの設定と共有しているのでしょうか。

2回リダイレクト設定操作をすることによる影響か?

なんとなく気が付きましたが、独自ドメインとサブドメインのリダイレクト設定にcPanelでは2回の操作が必要になります。その結果、.htaccessファイルに、同じURLにリダイレクトするというRewiteRuleが2回書き込まれ(6、9行目)、正しいリダイレクトができなくなっていたように思いました。

これが正しい解釈かは不明です、あしからず。

最後に

今回の問題を解決するのに、ネット上の情報を探しましたが、探し方が悪かったのか同じ問題を抱えている人に出会うことはありませんでした。もっとうまくリダイレクト設定できる方法があって、こんな問題は発生していないのかもしれません。

今回の解決方法は私の場合にはうまくいきましたが、他の方に当てはまるかどうか分かりません。備忘録的に記事として残しておきます。

ご意見あればコメント欄にお願いいたします。

mixhost

コメント