Index: /branches/version-2_13-dev/html/install/sql/insert_data.sql
===================================================================
--- /branches/version-2_13-dev/html/install/sql/insert_data.sql (revision 22856)
+++ /branches/version-2_13-dev/html/install/sql/insert_data.sql (revision 22922)
@@ -1256,4 +1256,5 @@
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('MYPAGE_ORDER_STATUS_DISP_FLAG', 'true', 1412, 'MYページ:ご注文状況表示フラグ');
INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('DEFAULT_COUNTRY_ID', 392, 1413, 'デフォルト国コード ISO_3166-1に準拠');
+INSERT INTO mtb_constants (id, name, rank, remarks) VALUES ('USE_NORMALIZE_HOSTNAME', true, 1414, 'ホスト名を正規化するか (true:する false:しない)');
Index: /branches/version-2_13-dev/data/class/SC_Initial.php
===================================================================
--- /branches/version-2_13-dev/data/class/SC_Initial.php (revision 22856)
+++ /branches/version-2_13-dev/data/class/SC_Initial.php (revision 22922)
@@ -58,4 +58,5 @@
$this->resetSuperglobalsRequest(); // stripslashesDeepGpc メソッドより後で実行
$this->setTimezone(); // 本当はエラーハンドラーより先に読みたい気も
+ $this->normalizeHostname(); // defineConstants メソッドより後で実行
}
@@ -489,3 +490,48 @@
date_default_timezone_set('Asia/Tokyo');
}
+
+ /**
+ * ホスト名を正規化する
+ *
+ * @return void
+ */
+ function normalizeHostname()
+ {
+ if (
+ // パラメーター
+ !USE_NORMALIZE_HOSTNAME
+ // コマンドライン実行の場合
+ || !isset($_SERVER['REQUEST_URI'])
+ // POSTの場合
+ || $_SERVER['REQUEST_METHOD'] === 'POST'
+ ) {
+ // 処理せず戻る
+ return;
+ }
+
+ $netUrlRequest = new Net_URL($_SERVER['REQUEST_URI']);
+ // 要求を受けたホスト名
+ $request_hostname = $netUrlRequest->host;
+
+ $netUrlCorrect = new Net_URL(SC_Utils_Ex::sfIsHTTPS() ? HTTPS_URL : HTTP_URL);
+ // 設定上のホスト名
+ $correct_hostname = $netUrlCorrect->host;
+
+ // ホスト名が不一致の場合
+ if ($request_hostname !== $correct_hostname) {
+ // ホスト名を書き換え
+ $netUrlRequest->host = $correct_hostname;
+ // 正しい URL
+ $correct_url = $netUrlRequest->getUrl();
+ // 警告
+ $msg = 'ホスト名不一致を検出。リダイレクト実行。';
+ $msg .= '要求値=' . var_export($request_hostname, true) . ' ';
+ $msg .= '設定値=' . var_export($correct_hostname, true) . ' ';
+ $msg .= 'リダイレクト先=' . var_export($correct_url, true) . ' ';
+ trigger_error($msg, E_USER_WARNING);
+ // リダイレクト(恒久的)
+ SC_Response_Ex::sendHttpStatus(301);
+ SC_Response_Ex::sendRedirect($correct_url);
+ }
+ }
}