さくらインターネットのレンタルサーバにEC-CUBE3をクイックインストールした時のお話


さくらインターネットのレンタルサーバに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

変更前

index.php
require __DIR__.'/../autoload.php';

変更後

index.php
require __DIR__.'/autoload.php';
  • index_dev.php

index.phpと同じようにパスを修正します。

上記の設定でhttp://独自ドメインでEC-CUBE3にアクセスできるようになりました。

SSLの設定

今回はさくらインターネットのSNI SSLを使用しました。

ドメイン/SSLの設定からSSLの設定を行います。
さくらインターネットでの設定は割愛します。

https://独自ドメインでアクセスできるよう設定を行います。

インストール先/autoload.phpの先頭に以下の内容を追記します。

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フォルダの除去は多くの方が実践しているようで色々参考にさせていただきました。