とある共有サーバでSOY CMSへのログインが出来ないという連絡がありました。


詳細は、

www.example.comというドメインのサイトがあって、

このサーバではexample.comでもアクセスが可能となっている。


運営側はwww.example.comで運営したかったので、

www.example.com/cms/adminが管理画面になるように設定した。

※簡単な管理画面のURLはやめましょう

SOY CMSであれば、管理画面のURLを特定したい


この状態で管理画面にアクセスしてみると、


soycms_has_www_login


ログイン画面は表示される。

ここでIDとパスワードを入力してログインを試みると、


ログインも出来ず、エラーにもならず、


soycms_no_www_login


wwwなしのexample.com/cms/adminの方の画面が表示された。

この後、手動でwww.example.com/cms/adminと打ち込んでエンターを押してみると、

ようこそSOY CMSへの画面が表示される。


どうやらログインはできているみたいだ。

とりあえず、www.example.comの方の画面で、

var_dump($_SERVER);

をしてみると、


HTTP_HOSTはwww.example.comでwwwありになっていたけど、

SERVER_NAMEの方はexample.comでwwwなしになっていた。


どうやらこの共有サーバでは、

wwwの有無に関わらずアクセスはできるけど、

Apacheの設定ではexample.comのみになっているらしい。


というわけで、

このようなサーバでもログインできるように下記の対応を行ってみた。


下記の2ファイルを作成

/インストールディレクトリ/admin/webapp/config.ext.php

/インストールディレクトリ/soycms/webapp/config.ext.php


どちらのconfig.ext.phpにも下記のコードを記述

<?php
//wwwなしの場合はwwwありへリダイレクト
if(strpos($_SERVER["HTTP_HOST"], "www") === false){
	header("Location:" . "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
	exit;
}

//SERVER_NAMEにwwwをつける
if(strpos($_SERVER["SERVER_NAME"], "www") === false){
	$_SERVER["SERVER_NAME"] = "www." . $_SERVER["SERVER_NAME"];
}
?>

これでwww.example.comの方で画面を開く直前で

HTTP_HOSTとSERVER_NAMEにwww付きのドメインを登録できたわけで、

送信ボタンや更新ボタンを押した後の画面のリダイレクトの際にwwwありの方が表示されるようになった。


追記

今回追加したconfig.ext.phpは管理画面の手動で追加する拡張用のファイルで

バージョンアップの際に上書きで今回の内容が消えるということはありません。


追記2

config.ext.phpでできること

エクストラモードでSOY CMSの管理画面をカスタマイズする - SOY CMS 開発ブログ