PHPでwww有りと無しのURLを統一する

例えば、http://www.example.com/ と http://example.com/ の内容が同じ場合、SEO的に見ればこれらはどちらかに統一されるべきです。

統一する方法として最もポピュラーなのは、Apacheのmod_rewriteを使用した統一方法だと思いますが、今回はmod_rewriteが使用できない環境且つPHPが使用できる環境での統一方法を紹介します。

ソースコード

www有りに統一

/**
 * www無しはリダイレクト
 */
if (!preg_match('/^www\./', $_SERVER['HTTP_HOST'])) {
	header("HTTP/1.1 301 Moved Permanently");
	header("Status: 301 Moved Permanently");
	header("Location: http://www." . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);

	exit;
}

www無しに統一

/**
 * www有りはリダイレクト
 */
if (preg_match('/^www\./', $_SERVER['HTTP_HOST'])) {
	$httpHost = ereg_replace("^www.", "", $_SERVER['HTTP_HOST']);
	header("HTTP/1.1 301 Moved Permanently");
	header("Status: 301 Moved Permanently");
	header("Location: http://" . $httpHost . $_SERVER['REQUEST_URI']);

	exit;
}

説明

まず正規表現でホスト名の先頭にwww.が有るか調べる。マッチすればTUREを返すのでwww有りに統一する場合は「!」で否定。無しの場合はそのまま。

次にリダイレクトの準備。Location:ヘッダでそのままリダイレクトすると、ステータスコード302(一時的移動)を返すので、ステータスコード301(恒久的移動)を返すように設定する。

www無しで統一する場合は上記に加え、ホスト名の先頭からwww.を削除する処理を追加する。

最後にLocation:ヘッダを使用して統一するURLへリダイレクト。この時、ホスト名のみでリダイレクトするとトップページに移動してしまうので、REQUEST_URIをホスト名の後に付加してあげる。

まとめ

  • 正規表現でwwwがあるかないか調べる
  • ステータスコード301じゃないと本末転倒
  • Location:ヘッダでリダイレクト
  • REQUEST_URIも付加してあげる

Comment(0)

Post your commnet

Trackback(0)

Trackback URL
Permanent link

Recent Entries
Category
Archives
Tag Cloud
あわせて読みたいブログパーツ