SSLの設定完了!

一番の懸念だった、SSLの設定は何とかうまくいった。
まず、そもそもの前提を勘違いしていたので、そこから。

1.ショップ毎に独自ドメインを設定する
  要するに、マルチサイトで作成したサブのサイトに独自ドメインを割り当てる。
2.SSLを使用する部分だけ、メインのサイトのドメインにする

前回までは、ここ(メインのサイトとサブのサイト)が逆になってたので、話がややこしくなってしまった。
まず、1の解決から。

独自ドメインつっても、テスト環境なんで簡易的に、
hostsファイルをいじくって、マシン名をもうひとつ割り当てた。

foo localhost #メインサイト用のマシン名
bar localhost #サブサイト用のマシン名

んで、サブサイトに独自ドメインを割り当てるところは
WordPress MU Domain Mappingを使用。
MUはついてるけど、WordPress3.0以降にも対応しているそうな。
サブサイトに対して、サブサイト用のドメイン名(ここで言えば、”bar”)を割り当て。
これで、サブサイトは独自ドメインでのアクセスとなる。

例)
メインサイトのURL:http://foo/
サブサイトのURL:http://bar/

本当のサブサイトのURLはhttp://foo/bar/だけど、リンクや内部動作は、WordPress MU Domain Mappingのおかげで、http://barに置き換わる

さて、2の解決。
まず、sslはwelcartの”Use SSL”をONにし、
WordPressのアドレスとブログのアドレスを”https://foo/bar”に設定する。
通常の共有SSLなら、これでOKなはずだけど、
今度はWordPress MU Domain Mappingが悪さして、自動的に”https://bar/にリダイレクトされてしまう。
動作的には問題ないんだけど、httpsが付くURLは1つのドメインとして統一したいので、
WordPress MU Domain Mappingのコアソースを一部修正。

設定内容からドメインを取得する部分

if ( get_site_option( 'dm_no_primary_domain' ) == 1 ) {
	$domain = $wpdb->get_var( "SELECT domain FROM {$wpdb->dmtable} WHERE blog_id = '{$wpdb->blogid}' AND domain = '" . $wpdb->escape( $_SERVER[ 'HTTP_HOST' ] ) . "' LIMIT 1" );
	if ( null == $domain ) {
		$return_url[ $wpdb->blogid ] = untrailingslashit( get_original_url( "siteurl" ) );
		return $return_url[ $wpdb->blogid ];
	}
} else {
	// get primary domain, if we don't have one then return original url.
	$domain = $wpdb->get_var( "SELECT domain FROM {$wpdb->dmtable} WHERE blog_id = '{$wpdb->blogid}' AND active = 1 LIMIT 1" );
	if ( null == $domain ) {
		$return_url[ $wpdb->blogid ] = untrailingslashit( get_original_url( "siteurl" ) );
		return $return_url[ $wpdb->blogid ];
	}
}

を以下のように修正

if ( get_site_option( 'dm_no_primary_domain' ) == 1 ) {
	$domain = $wpdb->get_var( "SELECT domain FROM {$wpdb->dmtable} WHERE blog_id = '{$wpdb->blogid}' AND domain = '" . $wpdb->escape( $_SERVER[ 'HTTP_HOST' ] ) . "' LIMIT 1" );
	if ( null == $domain ) {
		$return_url[ $wpdb->blogid ] = untrailingslashit( get_original_url( "siteurl" ) );
		return $return_url[ $wpdb->blogid ];
	}
} else {
	// httpsの場合はドメインマッピングに従わない Add Start
	if ( 'on' == strtolower( $_SERVER[ 'HTTPS' ] ) ) {
		$return_url[ $wpdb->blogid ] = untrailingslashit( get_original_url( "siteurl" ) );
		return $return_url[ $wpdb->blogid ];
	}
	// httpsの場合はドメインマッピングに従わない Add End
	// get primary domain, if we don't have one then return original url.
	$domain = $wpdb->get_var( "SELECT domain FROM {$wpdb->dmtable} WHERE blog_id = '{$wpdb->blogid}' AND active = 1 LIMIT 1" );
	if ( null == $domain ) {
		$return_url[ $wpdb->blogid ] = untrailingslashit( get_original_url( "siteurl" ) );
		return $return_url[ $wpdb->blogid ];
	}
}

これで、無事にSSLアクセスだけメインサイトのドメインとなった。

ちなみに、その他の動作として

  • ホームのリンク先は、独自ドメインにならない。ただし、リダイレクトされるため、遷移した際のURLは独自ドメイン
  • 管理画面は独自ドメインにならない。独自ドメインでアクセスしても、メインサイト用のドメインにリダイレクトされる

みたい。
ま、ホームのURLは設定で変えられるし、管理画面もSSLにするつもりだから問題ないけど。

コメント

タイトルとURLをコピーしました