さくらインターネットのレンタルサーバにEC-CUBE3をクイックインストールしました。その時の躓いたことをメモしておきます。
前提条件
- さくらインターネットのレンタルサーバ、プランはスタンダードプランを契約
- 独自ドメインの使用
- EC-CUBEのhtmlフォルダの除去
- EC-CUBEのSSL化を実施
- 独自ドメインでTopページにアクセス(index.phpは表示しないようにする)
EC-CUBE3のクイックインストール
EC-CUBE3をクイックインストールするとインストール先のフォルダの配下に/htmlフォルダが作成されてしまいます。
そのままですと、http://ドメイン/インストール先フォルダ/htmlでアクセスするようになります。
まずこれをhttp://ドメインでアクセスできるようにします。
SSLは後述します。
初期ドメイン(xxx.sakura.ne.jp)でインストール先を指定、データベースの設定を入力してインストールします。
独自ドメインの設定
クイックインストールが完了したら、ドメイン/SSL設定で独自ドメインを設定します。
その際、パスはEC-CUBE3をインストールしたフォルダを含めます。
EC-CUBE3の初期設定
そのままインストールするとURLに/htmlが含まれてしまうので含まれないようにします。
EC-CUBE3をインストールしたパスの配下にhtmlフォルダがあります。
そのhtmlフォルダの.htaccessの以下の部分を変更します。
変更前
RewriteBase /インストール先/html
変更後(/インストール先を削除します)
RewriteBase /html
EC-CUBE3のインストール先の配下とインストール先/appの配下にある.htaccessを以下のように変更します。
<FilesMatch "^composer|^autoload|^cli-config|^COPYING|\.(ht|ini|lock|dist|git|sh)$">
order allow,deny
deny from all
</FilesMatch>
<Files ~ "index.php|index_dev.php">
order deny,allow
allow from all
</Files>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /html/
RewriteRule ^user_data/(.*)$ /html/user_data/$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|css|ico|js)$ [NC]
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
上記の設定が完了した後、http://独自ドメイン/htmlにアクセスしてEC-CUBE3の初期設定を行います。
htmlフォルダを外す設定
/app/eccube/path.ymlの以下の部分を変更します。
変更前
root_urlpath : /html/
変更後(/html/を削除します)
root_urlpath :
以下のファイルを/htmlフォルダから1つ上のフォルダに移動します。
- .htaccess
- index.php
- index_dev.php
ファイルを移動したため、ファイル内のパスを変更します。
- .htaccess
変更前
RewriteBase /html
変更後(htmlを削除します)
RewriteBase /
- index.php
変更前
require __DIR__.'/../autoload.php';
変更後
require __DIR__.'/autoload.php';
- index_dev.php
index.phpと同じようにパスを修正します。
上記の設定でhttp://独自ドメインでEC-CUBE3にアクセスできるようになりました。
SSLの設定
今回はさくらインターネットのSNI SSLを使用しました。
ドメイン/SSLの設定からSSLの設定を行います。
さくらインターネットでの設定は割愛します。
インストール先/autoload.phpの先頭に以下の内容を追記します。
if (isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR'])) {
$_SERVER['HTTPS'] = 'on';
$_ENV['HTTPS'] = 'on';
$_SERVER['HTTP_HOST'] = 'ドメイン名';
$_SERVER['SERVER_NAME'] = 'ドメイン名';
$_ENV['HTTP_HOST'] = 'ドメイン名';
$_ENV['SERVER_NAME'] = 'ドメイン名';
}
app/config/eccube/config.ymlを変更します。
変更前
force_ssl: null
変更後
force_ssl: 1
インストール先/.htaccessを以下のように変更します。
変更後
<FilesMatch "^composer|^autoload|^cli-config|^COPYING|\.(ht|ini|lock|dist|git|sh)$">
order allow,deny
deny from all
</FilesMatch>
<Files ~ "index.php|index_dev.php">
order deny,allow
allow from all
</Files>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^user_data/(.*)$ /html/user_data/$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|css|ico|js)$ [NC]
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
問題が発生(http://独自ドメインでアクセスするとhttps://独自ドメイン/index.phpにリダイレクトされる)
http://独自ドメインでアクセスするとhttps://独自ドメイン/index.phpにリダイレクトされてしまいました。
その後操作するとhttps://独自ドメイン/index.php/~というURLになってしまいました。
index.phpが邪魔で表示されないよう試行錯誤した結果、インストール先/.htaccessを以下のように変更します。
httpからリダイレクトされても/index.phpが表示されないようになりました。
変更後
<FilesMatch "^composer|^autoload|^cli-config|^COPYING|\.(ht|ini|lock|dist|git|sh)$">
order allow,deny
deny from all
</FilesMatch>
<Files ~ "index.php|index_dev.php">
order deny,allow
allow from all
</Files>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^user_data/(.*)$ /html/user_data/$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpg|css|ico|js)$ [NC]
RewriteRule ^(.*)$ index.php [QSA,L]
RewriteCond %{THE_REQUEST} ^.*/index.php
RewriteRule ^(.*)index.php$ https://%{HTTP_HOST}/$1 [L,R=301]
</IfModule>
動作確認
- 管理画面にログイン
- 管理画面で操作可能かどうか
- 商品をカートに追加することが可能かどうか
- 会員ログインが可能かどうか
終わりに
EC-CUBE3のhtmlフォルダの除去は多くの方が実践しているようで色々参考にさせていただきました。