レンタルサーバー毎の設定
提供: baserCMS公式ガイド
baserCMSをインストールしたサーバーによっては、いくつかの作業を行なっておいたほうが、安定して運用できる場合があります。
目次
ロリポップ![編集]
WAFの無効化[編集]
ロリポップが持っている機能で、WAF(ウェブ・アプリケーション・ファイアーウォール)を無効化します。標準では有効になっていますが、baserCMSではルーティング等に影響があるようです。実際の作業の仕方はロリポップ!の公式マニュアル「WAFの設定・解除」をご覧ください。
mbstring.internal_encodingの設定[編集]
ページ管理、ブログ管理等で使用するWYSIWYGエディタが正常に表示されない場合、ロリポップの管理画面から「php.ini」の設定を行います。
設定画面に入ると、沢山の設定項目が出てきますが、その中で「mbstring.internal_encoding」の項目を、「未設定」から「UTF-8」に変更してください。この設定を行うことで、サーバーが内部処理につかう文字コードが、baserCMSが使用する文字コード「UTF-8」になり、不具合が解消されます。
具体的な作業方法は、公式サイト「PHPの設定」をご覧ください。
ヘテムル[編集]
WAFの一部除外[編集]
ブログ記事保存時にWAFが影響して保存できない場合は、一部除外で対応できます。(baserCMS 3.0.8にて確認)
参考:http://heteml.jp/support/manual/waf/#htaccess
.htaccess へ以下を追記してください。
# and/or,</> SiteGuard_User_ExcludeSig sqlinj-22 # select...from... SiteGuard_User_ExcludeSig sqlinj-1 # or...=, and...= SiteGuard_User_ExcludeSig sqlinj-9 # or...--, and...-- SiteGuard_User_ExcludeSig sqlinj-10 # in SiteGuard_User_ExcludeSig sqlinj-21 # group by ... having 1=1 SiteGuard_User_ExcludeSig sqlinj-103 # order by SiteGuard_User_ExcludeSig sqlinj-8 # '-- SiteGuard_User_ExcludeSig sqlinj-13
BurgerEditorの場合、ブログのプレビューなどが該当する(baserCMS3.0.9)
# イベントハンドラ追加43(onchange=...) SiteGuard_User_ExcludeSig xss-onX-43
WAFの無効化[編集]
ヘテムルもロリポップと同様に、WAF(ウェブ・アプリケーション・ファイアーウォール)を無効化します。標準では有効になっていますが、baserCMSではルーティング等に影響があるようです。実際の作業の仕方はヘテムルの公式マニュアル「WAFの設定方法」をご覧ください。
mbstring.internal_encodingの設定[編集]
ページ管理、ブログ管理等で使用するWYSIWYGエディタが正常に表示されない場合、ヘテムルの管理画面から「php.ini」の設定を行います。
設定画面に入ると、沢山の設定項目が出てきますが、その中で「mbstring.internal_encoding」の項目を、「未設定」から「UTF-8」に変更してください。この設定を行うことで、サーバーが内部処理につかう文字コードが、baserCMSが使用する文字コード「UTF-8」になり、不具合が解消されます。
具体的な作業方法は、公式サイト「php.iniのご利用方法」をご覧ください。
さくらインターネット[編集]
ドキュメントルート直下にインストールする場合[編集]
インストール画面がエラーになる場合、
.htaccess
/app/webroot/.htaccess
に
RewriteEngine On
RewriteBase / ← この行
を追加する必要があります。
テキスト寄贈:馬庭 吾一@株式会社ヒニアラタ
管理側SSLを有効化するとリダイレクトループが起きる[編集]
さくらサーバの場合(2017/04/7時点)は、httpsへwwwアリでアクセスしてもHTTP_HOST変数にはwwwなしのドメイン情報がセットされる仕様に変わっているようです。
https://www.example.com/ の場合、 HTTP_HOST example.com となる。
通常だったら HTTP_HOST www.example.com になるはず。
そこで、対応方法としては
- htaccess で調整する。
- install.php の adminSsl は false のままで利用する。
Configure::write('BcApp.adminSsl', false);
RewriteEngine on RewriteBase / RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$ RewriteRule ^(.*)$ https://YOUR_DOMAIN/$1 [R=301,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L]
SNI利用の場合は下記でうまくいきました。
RewriteCond %{ENV:HTTPS} !^on$ RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$ RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
- baserCMS3系の場合
上記の対応のみでOK
- baserCMS4系の場合
コアの処理で管理画面の場合にadminSslの値と関係なく リダイレクトしようとしている箇所があるので、その部分をコメントアウトする。
lib/Baser/Controller/BcAppController.php 260行あたり
public function beforeFilter() { parent::beforeFilter(); $isRequestView = $this->request->is('requestview'); $isUpdate = $this->request->is('update'); $isAdmin = $this->request->is('admin'); $isInstall = $this->request->is('install'); $isMaintenance = $this->request->is('maintenance'); // CUSTOMIZE DELETE 2017/04/07 // ※ さくらサーバの場合の不具合のため、管理画面リダイレクト処理を削除(.htaccessにて対応) // さくらの共有サーバーでSNIを使ってSSLを導入の場合、 // https://www.example.com/ でアクセスしてもHTTP_HOST = example.com となり、siteUrl()の値が正しくない。 // 通常のサーバではHTTP_HOST = www.example.com がセットされている。 // >>> // // 設定されたサイトURLとリクエストされたサイトURLが違う場合は設定されたサイトにリダイレクト // if($isAdmin) { // if($this->request->is('ssl')) { // $siteUrl = Configure::read('BcEnv.sslUrl'); // } else { // $siteUrl = Configure::read('BcEnv.siteUrl'); // } // if($siteUrl && siteUrl() != $siteUrl) { // $this->redirect($siteUrl . preg_replace('/^\//', '', Router::reverse($this->request, false))); // } // } // <<< // メンテナンス if (!empty($this->siteConfigs['maintenance']) && (Configure::read('debug') < 1) && !$isMaintenance && !$isAdmin && !BcUtil::isAdminUser()) { if (!empty($this->request->params['return']) && !empty($this->request->params['requested'])) { return; } else { $redirectUrl = '/maintenance'; if ($this->request->params['Site']['alias']) { $redirectUrl = '/' . $this->request->params['Site']['alias'] . $redirectUrl; } $this->redirect($redirectUrl); } }
メールアドレスでエラー[編集]
指定したメールアドレスが送信できない場合、STEP4でエラーになる。
さくらレンタルサーバから送信可能なアドレスを指定してインストールしてください。
basic認証が2回表示される[編集]
htaccessファイルに以下を記載して回避できる。
<If "%{HTTP:X-SAKURA-FORWARDED-FOR} != ''"> AuthType Basic AuthName "Input your ID and Password." AuthUserFile /your/password/path/.htpasswd require valid-user </If>
SSLへリダイレクト出来ない場合(2018/02/22時点)[編集]
X-Sakura-Forwarded-For変数で判別できないサーバはで.htaccessファイルに以下を記載することで対応可能です。
Allow from all RewriteEngine on RewriteBase / SetEnvIf REDIRECT_HTTPS (.*) HTTPS=$1 RewriteCond %{ENV:HTTPS} !^on$ RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L]
- 参考: https://help.sakura.ad.jp/hc/ja/articles/115000051662
- 参考: https://help.sakura.ad.jp/hc/ja/articles/360000027581-%E3%83%AC%E3%83%B3%E3%82%BF%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E4%BB%95%E6%A7%98%E5%A4%89%E6%9B%B4%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6-2018%E5%B9%B43%E6%9C%88-
CPIサーバ[編集]
http://qiita.com/materializing/items/4aefd8f024bb1b2bb5af も参考になります。
管理側だけWAF無効化する[編集]
WAFの影響で記事更新できないときには以下で対策取ることができる。
- 管理側URLと同じ配置でディレクトリ作る: http://example.com/admin の場合、/admin/ でディレクトリ作る
- 中に index.php と .htaccess 置く
■ /admin/index.php
<?php header('Location: /admin/dashboard/index'); exit;
■ /admin/.htaccess
<IfModule siteguard_module> SiteGuard_User_ExcludeSig all </IfModule>
スマートURL ON にならない[編集]
CPIサーバでRewriteを有効にするには .htaccess に Options +FollowSymLinks を追記する必要がある。 (Options +FollowSymLinks の記載がないと Internal server error)
Options +FollowSymLinks
参考: http://acesr.document.secure.ne.jp/other/tips-htaccess/
参考: http://ameblo.jp/huangke/entry-10429548096.html
CPIサーバ(マネージドプラン、CHMシリーズ)などは記述する内容が変更になったようです。 FollowSymLinksの記述だとInternal server errorになりました。
参考: http://chmz.document.secure.jp/other/Tips-htaccess/
Options +FollowSymLinks ↓ Options +SymLinksIfOwnerMatch
例2)
Options +SymLinksIfOwnerMatch -MultiViews
追記[編集]
セキュリティ強化のためか、 (baserCMS設置フォルダ)/index.phpファイルのパーミッションが 書き込み許可( -wr-wr-wr- / chmod 666)になったまま、 .htaccessへ Options +SymLinksIfOwnerMatchを記述して RewriteEngine on にすると、Internal server error になるようでした。
FileZilla や SSHでログインして chmod 644 など、 ファイル所有者以外書き込みできないようにしておいてください。
×: -wr-wr-wr- 666 ○: -wr-r--r-- 644
POST時に文字化けする[編集]
CPIサーバは mbstring.encoding_translation = On のようで、ブログ記事保存時に文字化けする。 (何故か固定ページは化けないようですが…) 対応方法としては php.ini で各設定して対応します。
参考: http://wataame.sumomo.ne.jp/archives/5103
テキストエディタで「php.ini」としたファイルを作成し、<Ctrl+V>でペースト。 次に、以下の設定を変更します。 mbstring.internal_encoding = EUC-JP を mbstring.internal_encoding = utf-8 と変更 mbstring.encoding_translation = On とあるので、これを mbstring.encoding_translation = Off に変更 作成したら、/usr/home/ユーザー名/ にFTPで設置。 階層的に、「html」と同列に来るようにします。この位置は、ブラウザからは参照できない位置となります。 .htaccess作成、設置 次に、CPIでPHPを使うには、.htaccess ファイルが必要なので作成します。 以下内容を記述。 AddHandler x-httpd-php559 .php #←★php5.5.9を使う宣言 suPHP_ConfigPath /usr/home/ユーザー名 #←★php.iniのパスを記述 1行目の内容は、コントロールパネル、「サポート」タブ → オンラインヘルプ →「PHPについて」を参照の事。 2行目には、先ほどFTPアップロードした php.ini までのパスを記述します。
.htaccess でのSSL対応が有効にならない[編集]
CPIサーバでは RewriteCond %{HTTPS} なんとか が有効にならないため、ポート番号で判別する
RewriteCond %{SERVER_PORT} ^80$
参考: http://wataame.sumomo.ne.jp/archives/5121
サンプル
Options +FollowSymLinks suPHP_ConfigPath /usr/home/XXXXXX/conf/ RewriteEngine on RewriteBase / #RewriteCond %{HTTPS} off RewriteCond %{SERVER_PORT} ^80$ RewriteCond %{REQUEST_URI} ^(/inquiry|/admin).*$ RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L]
PHPバージョン切り替え (CPI オンラインヘルプより)[編集]
参考: http://chmz.document.secure.jp/tools/php/
PHP 5.4.39 の場合 AddHandler x-httpd-php5439 .php PHP 5.5.23 の場合 AddHandler x-httpd-php5523 .php PHP 5.6.7 の場合 AddHandler x-httpd-php567 .php
ラピッドサイトVPS[編集]
ControlPanelヘアクセス出来ない時の対応[編集]
ラピッドサイトのVPS( http://www.rapidsite.jp/ )にて メインドメインのドキュメントルートへbaserCMSやWordpressなど リライトを使ったサイトを設置すると、ラピッドサイトの ControlPanel( http://ドメイン名/ControlPanel/ )へアクセスできなくなってしまいます。
http://www.rapidsite.jp/support/guide_migration/userguide/start_up/e_11326.html
原因[編集]
.htaccessへ記載されたリライトの内容の方が有効になってしまい、not foundになってしまうようです。
対応方法[編集]
- ドキュメントルート直下に ControlPanel という名前の空のフォルダを設置
- ControlPanelフォルダ内に .htaccessファイルを作成、RewriteEngine Off を記述
これで、 http://ドメイン名/ControlPanel/ で元通りアクセスできるようになります。
※ 参考サイト
http://tetch1987.com/shittakabull/web/rapidsite-vps-install-wordpress-and-eccube#title8
6.ControlPanelへログインできるようにする 「http://ドメイン名/ControlPanel」にアクセスしてもWordpressのテーマが表示されてしまうので修正する 「http://ドメイン名/」に「ControlPanel」のフォルダをアップロード 「http://ドメイン名/ControlPanel/」に「.htaccess」を作成し下記を記入。 RewriteEngine Off
WebArena[編集]
BurgerEditor内のCKEditorが動作しない場合の対応[編集]
下記の実ファイルがないと、BurgerEditor内のCKEditorが動作しなかった。 実ファイルを設置すると動作するようになりました。
(BurgerEditor自体は正常に動作していました)
/home/burger_editor/js/ckeditor/adapters/jquery.js
アルファメールプレミア[編集]
インストール後にテーマのCSS、JSが有効にならない場合の対応[編集]
原因[編集]
app/.htaccess app/webroot/.htaccess
の2つのファイルに、アクセス制限の記述(Order allow,deny等)が初期状態で記載していますが、 このアクセス制限の記述が許可されていないサーバだった為、 CSSやJS,imgへアクセスすると500 internal server error となっていました。
※インストール画面では、インストールプログラムにて直接CSS,JS,imgを読み込んでいるので、 正常表示されるが、インストール完了直前からはテーマ内のcss,js,imgを読み込む為、 インストール画面では正常に表示されていたが、インストール完了前後で表示が崩れていました。
対応方法[編集]
apacheの設定を変更するか、変更できない場合は、 下記のファイル内のアクセス制限の記述をコメントして対応します。
app/.htaccess
#Order allow,deny #Deny from all
app/webroot/.htaccess
#Allow from all
以上です
メールのバリデーションがおかしい時の対応[編集]
追記: http://qiita.com/materializing/items/4f95585166f983f11042 も参考になります。
PCREのバージョンが低く、Emailのチェック(正規表現)がうまく動作しない状態の時がある。
※ 具体的には、大塚商会アルファメールプレミアで起きました。
その為、フォームのメールのチェックやメール送信で、正しいメールアドレスでもエラー扱いになる。 また、インストール時のユーザー作成時に正しいメールでもエラー扱いになってしまい、管理者ユーザーが生成されていない状態になる。
PCRE (Perl Compatible Regular Expressions) PCRE Library Version 6.6 06-Feb-2006
※ baserCMSで使用しているCakePHPのバージョンアップによりbaserCMS 3.0.1 以降で上記症状が起きる状態です。
上記バージョンの場合、正規表現で\p{L}などが使えない状態。
PCRE (Perl Compatible Regular Expressions) Support enabled PCRE Library Version 8.32 2012-11-30
とかだと、問題ないようです。
対応方法[編集]
lib/Cake/Utility/Validation.php を app/Utility/Validation.php へコピーして
app/Utility/Validation.php の 45行目〜46行目辺りを
//'hostname' => '(?:[_\p{L}0-9][-_\p{L}0-9]*\.)*(?:[\p{L}0-9][-\p{L}0-9]{0,62})\.(?:(?:[a-z]{2}\.)?[a-z]{2,})' ↓ 'hostname' => '(?:[_a-z0-9][-_a-z0-9]*\.)*(?:[a-z0-9][-a-z0-9]{0,62})\.(?:(?:[a-z]{2}\.)?[a-z]{2,})'
のように変更、 462行目〜463行目辺りを
//$regex = '/^[\p{L}0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[\p{L}0-9!#$%&\'*+\/=?^_`{|}~-]+)*@' . self::$_pattern['hostname'] . '$/ui'; ↓ $regex = '/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@' . self::$_pattern['hostname'] . '$/i';
のように変更します。
※ baserCMS 3.0.5 以降ではCakePHPのバージョンアップにより、上記対応に加えて、以下の対応も必要です。
lib/Cake/Network/Email/CakeEmail.php を app/Network/Email/CakeEmail.php へコピーして
app/Network/Email/CakeEmail.php を下記のように変更します。
protected $_emailPattern = '/^((?:[\p{L}0-9.!#$%&\'*+\/=?^_`{|}~-]+)*@[\p{L}0-9-.]+)$/ui'; ↓ protected $_emailPattern = null;
と変更してください。
参考: http://php.net/manual/ja/reference.pcre.pattern.syntax.php#75339
参考: http://phpexcel.codeplex.com/discussions/238547
メールフォーム設定画面 送信先メールアドレス のラジオボタンが消える[編集]
HTMLのラジオボタン生成時にIDの0が消えてしまって、JSの動作が正しく動いていない。 保存される値には影響がないが見た目がおかしい。
本来は
<input name="data[MailContent][sender_1_]" id="MailContentSender1_" value="" class="firstChild empty" type="hidden"> <input name="data[MailContent][sender_1_]" id="MailContentSender10" value="0" class="firstChild lastChild empty" checked="checked" type="radio"> <input name="data[MailContent][sender_1_]" id="MailContentSender11" value="1" class="firstChild lastChild empty" type="radio"> <input name="data[MailContent][sender_1]" size="40" maxlength="255" value="" id="MailContentSender1" class="lastChild empty" style="display: inline;" type="text">
のようなHTMLが生成されるが、このサーバの場合は
<input name="data[MailContent][sender_1_]" id="MailContentSender1_" value="" class="firstChild empty" type="hidden"> <input name="data[MailContent][sender_1_]" id="MailContentSender1" value="0" class="firstChild lastChild empty" checked="checked" type="radio"> <input name="data[MailContent][sender_1_]" id="MailContentSender11" value="1" class="firstChild lastChild empty" type="radio"> <input name="data[MailContent][sender_1]" size="40" maxlength="255" value="" id="MailContentSender1" class="lastChild empty" style="display: inline;" type="text">
と表示されてしまう(理由は不明)
id="MailContentSender10" → id="MailContentSender1" のように0が消えてしまう。
その為、テキストエリアのid="MailContentSender1" とかぶってしまうのが原因。
対応方法[編集]
・見た目だけなので、放置する
・ソースを書き換え、ID重複がしないように変更する
lib/Baser/Plugin/Mail/View/MailContents/admin/form.php を app/webroot/theme/(テーマ名)/MailContents/admin/form.php へコピーする。(フォルダも作成)
app/webroot/theme/(テーマ名)/MailContents/admin/form.php を変更する
22行目
$('input[name="data[MailContent][sender_1_]"]').click(mailContentSender1ClickHandler); ↓ $('input[name="data[MailContent][sender_1a]"]').click(mailContentSender1ClickHandler);
27行目
$("#MailContentSender1_1").attr('checked',true); }else{ $("#MailContentSender1_0").attr('checked',true); ↓ $("#MailContentSender1a1").attr('checked',true); }else{ $("#MailContentSender1a").attr('checked',true);
60行目
if($('input[name="data[MailContent][sender_1_]"]:checked').val() == '1'){ ↓ if($('input[name="data[MailContent][sender_1a]"]:checked').val() == '1'){
135行目
echo $this->BcForm->input('MailContent.sender_1_', array( ↓ echo $this->BcForm->input('MailContent.sender_1a', array(
※ baserCMS 3.0.15で確認、baserCMS4系はこちらのサーバで動作しないので未確認。
お名前.com
共有SDサーバーでhtaccessを置いてbaserCMSが動かないとき
RewriteBase /
を追加すると良い。
※追記:最近契約されたさくらサーバ(プラン不明)も同様の現象がありました。
共有SDサーバーでアップロードできないファイル名
- アンダースコア( _ ) : 2つまでならアップロード可能
- ドット ( . ) : 1つまで。 2つ以上連続するとアップロードできない。
- カンマ ( , ) : 8つ連続でカンマを付けてもアップロード可能でした。
- ハイフン ( - ) : 8つ連続でハイフンを付けてもアップロード可能でした。
- イコール ( = ) : ファイル名に付いているとアップロード不可。
共有SDサーバーで固定ページの保存ができない
固定ページの作成・編集を行おうとすると、タイムアウトが発生して保存できない現象が起きることがあります。ページ管理のバリデーション(PHP構文チェック)で足踏みしていることが原因のようです。ページ管理のModelファイル(/lib/Baser/Model/Page.php)をappフォルダの同階層にコピーし、問題のバリデーション箇所をコメントアウトすれば動作します。以下は同ファイルのバリデーション設定部分です。後半でコメントアウトを入れています。
public $validate = array( 'name' => array( array('rule' => array('notEmpty'), 'message' => 'ページ名を入力してください。', 'required' => true), array('rule' => array('maxLength', 50), 'message' => 'ページ名は50文字以内で入力してください。'), array('rule' => array('pageExists'), 'message' => '指定したページは既に存在します。ファイル名、またはカテゴリを変更してください。') ), 'page_category_id' => array( array('rule' => array('pageExists'), 'message' => '指定したページは既に存在します。ファイル名、またはカテゴリを変更してください。') ), 'title' => array( array('rule' => array('maxLength', 255), 'message' => 'ページタイトルは255文字以内で入力してください。') ), 'description' => array( array('rule' => array('maxLength', 255), 'message' => '説明文は255文字以内で入力してください。') ), 'contents' => array( /* ここから array('rule' => array('phpValidSyntax'), 'message' => 'PHPの構文エラーが発生しました。'), ここまで */ array('rule' => array('maxByte', 64000), 'message' => '本稿欄に保存できるデータ量を超えています。') ), 'draft' => array( /* ここから array('rule' => array('phpValidSyntax'), 'message' => 'PHPの構文エラーが発生しました。'), ここまで */ array('rule' => array('maxByte', 64000), 'message' => '草稿欄に保存できるデータ量を超えています。') ), );
Just-Size.Networks[編集]
参考:マニュアル「BaserCMS」
PHPバージョン切り替え[編集]
参考: https://www.just-size.net/support/manual_php.php#change_ver
PHP 7.1.x の場合 AddHandler php7.1-script .php PHP 7.2.x の場合 AddHandler php7.2-script .php PHP 7.3.x の場合 AddHandler php7.3-script .php