EC-CUBE3をさくらのレンタルサーバにインストールした時にhtmlを付けさせない方法

過去の記事ではURLに/htmlを付けさせない方法を書いてきました。

EC-CUBE3のURL設定について - AmidaikeBlog

EC-CUBE3のURL設定について2 - AmidaikeBlog

レンタルサーバでEC-CUBE3でのURL設定の仕方について - AmidaikeBlog

レンタルサーバでEC-CUBE3のURLにhtmlを付けさせない方法 - AmidaikeBlog

今回はさくらのレンタルサーバに特化してしまいますが、以下の通りにすればhtmlを無くす事ができます。

クイックインストールを使うのでEC-CUBE3をアップロードをしてインストールされる方は勝手が異なりますのでご注意ください。

今回の方法では、初期ドメイン(sakura.ne.jp)でインストールした後に独自ドメインを割り当てる方法となります。

1.クイックインストール時に初期ドメイン(xxxxxx.sakura.ne.jp)でインストールを行います。その際、ec-cubeをインストールするディレクトリを指定してください。

2.クイックインストールが完了しましたら、独自ドメインの指定ディレクトリを先ほどec-cubeをインストールしたディレクトリに設定します。

3.EC-CUBEをインストールしたディレクトリの配下にある/htmlディレクトリの.htaccessを以下のように変更を行います。

RewriteBase /html

4.さらに、EC-CUBEをインストールしたディレクトリ直下と/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>

5.http://独自ドメイン/htmlでEC-CUBEインストーラーが 表示されますので通常のインストールを行ってください。

6.インストールが完了すれば、 app/config/eccube/にファイルが作成されますので、 ファイルマネージャーなどを利用してapp/config/eccube/path.ymlの以下の部分を修正します。

root_urlpath : /html/
↓
root_urlpath :

7.以上の設定で、htmlをなくしてサイトが表示されます。

8.新規ページを作成する場合、以下のカスタマイズを行う必要がありますので必要な方は修正をしてください。

html/index.php
のif文の内容を下記の該当する部分のように変更してください。

// インストールされてなければインストーラにリダイレクト
if ($app['config']['eccube_install']) {
    $app->initialize();
    $app->initializePlugin();

    $front = $app['controllers_factory'];
    // 強制SSL
    if ($app['config']['force_ssl'] == \Eccube\Common\Constant::ENABLED) {
        $front->requireHttps();
    }

    $front->match('/{route}', '\Eccube\Controller\UserDataController::index')->assert('route', '([0-9a-zA-Z_\-]+\/?)+(?<!\/)')->bind('user_data');
    $app->mount('', $front);

    if ($app['config']['http_cache']['enabled']) {
        $app['http_cache']->run();
    } else {
        $app->run();
    }
} else {
    $location = str_replace('index.php', 'install.php', $_SERVER['SCRIPT_NAME']);
    header('Location:'.$location);
    exit;
}

src/Eccube/ControllerProvider/FrontControllerProvider.php

// user定義
$c->match('/'.$app['config']['user_data_route'].'/{route}', '\Eccube\Controller\UserDataController::index')->assert('route', '([0-9a-zA-Z_\-]+\/?)+(?<!\/)')->bind('user_data');

// user定義
// $c->match('/'.$app['config']['user_data_route'].'/{route}', '\Eccube\Controller\UserDataController::index')->assert('route', '([0-9a-zA-Z_\-]+\/?)+(?<!\/)')->bind('user_data');

コメントアウトしてください。

今回はさくらのレンタルサーバを対象に記述しましたが、他のレンタルサーバでも同様に動くかもしれませんので是非お試しください。

【 2016/09/29 追記】

EC-CUBE3.0.11よりhtmlを削除する機能が提供されました。

amidaike.hatenablog.com