Webサイトのお困りごとはこちらへ

EC-CUBE 3系:プラグイン不要でメンテナンスモードにする方法(管理画面は除外OK)

ハシビィくん

EC-CUBE(3系)でメンテナンスモードにしたいっすけど、機能としてはないっすよね?

カピーさん

ないぞ。プラグインを入れるか、.htaccessに追記するしかない。プラグインでも不具合もあるみたいだし、確実な.htaccessでの方法をお教えしよう。

今回は、EC-CUBE稼働中のサイトを一旦メンテナンスページにリダイレクト(遷移)させたいというカスタマイズになります。

一応公式のプラグインストアからメンテナンスモードにするプラグインはありますが、一部環境において正常に稼働しない様子なので、.htaccessから操作しちゃおうという内容です。

紹介する方法でECサイトのページはメンテナンスページへ。管理画面はきちんと管理画面にという形で利用することができます。

正直すこーし面倒でしたので、参考になれば幸いです。

目次

.htaccessに追記してメンテナンスページに遷移を有効に

作業を始める前に既存の.htaccessをバックアップするようにしてください。

前提条件としてHTMLファイルで「maintenance.html」(ファイル名はご自由に)を作成し、.htaccessと同じ階層に設置してください。

まずは基本系。ドメイン直下にEC-CUBEをインストールしている場合。

<IfModule mod_rewrite.c>
    RewriteEngine On
    # ベースをドメイン直下に設定
    RewriteBase /

    # Authorization ヘッダ対応
    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

    # ----------------------------------------------------------------
    # メンテナンスモード設定
    # ----------------------------------------------------------------

    # 1. 管理画面(/admin)以外 かつ 実在するファイル以外 をメンテナンス対象にする
    RewriteCond %{REQUEST_URI} !/admin [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpe?g|css|ico|js|svg)$ [NC]
    # ショップ側を maintenance.html へ飛ばす
    RewriteRule ^(.*)$ /maintenance.html [R=302,L]

    # 2. 上記の条件にかからなかったもの(=管理画面 /admin へのアクセス)
    # EC-CUBE本来の処理を行う
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpe?g|css|ico|js|svg)$ [NC]
    RewriteRule ^(.*)$ index.php [QSA,L]

</IfModule>

次はサブディレクトリである/shopにEC-CUBEがある状態になります。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /shop/

    # Authorization ヘッダ対応(元の記述を維持)
    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

    # ----------------------------------------------------------------
    # メンテナンスモード設定
    # ----------------------------------------------------------------

    # 1. 管理画面(/admin)以外 かつ 実在するファイル以外 をリダイレクト対象にする
    RewriteCond %{REQUEST_URI} !/admin [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpe?g|css|ico|js|svg)$ [NC]
    # ショップ側を maintenance.html へ飛ばす(302リダイレクト)
    RewriteRule ^(.*)$ /shop/maintenance.html [R=302,L]

    # 2. 上記の条件にかからなかったもの(=管理画面 /admin へのアクセス)
    # EC-CUBE本来の処理を行う(ここがないと404になります)
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpe?g|css|ico|js|svg)$ [NC]
    RewriteRule ^(.*)$ index.php [QSA,L]

</IfModule>

# --- 以下、Expires設定などの記述を続けてください ---

EC-CUBEの特徴として、管理画面は/adminというURLになるんだけど、このadminというのが別段フォルダがあるわけではなくて、ここで勘違いをしていたパターンで苦労しました。

補足:maintenance.htmlの中身(サンプル)

メンテナンスのサンプルコード例
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>メンテナンス中</title>
    <style>
        /* ベーススタイル(リセット含む) */
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }

        body {
            font-family: "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif;
            background-color: #f4f6f8; /* 背景色:薄いグレー */
            color: #333;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            padding: 20px;
        }

        /* メインコンテナ */
        .maintenance-container {
            background-color: #ffffff;
            width: 100%;
            max-width: 600px;
            padding: 60px 40px;
            text-align: center;
            border-radius: 8px;
            box-shadow: 0 4px 15px rgba(0,0,0,0.05);
            border-top: 5px solid #4a5568; /* アクセントカラー */
        }

        /* アイコン(CSSで描画するスパナマークの代わり:シンプルに記号を使用) */
        .icon {
            font-size: 60px;
            margin-bottom: 20px;
            color: #4a5568;
            line-height: 1;
        }

        /* タイトル */
        h1 {
            font-size: 28px;
            font-weight: bold;
            margin-bottom: 24px;
            color: #1a202c;
        }

        /* 本文テキスト */
        p {
            font-size: 16px;
            line-height: 1.8;
            margin-bottom: 16px;
            color: #4a5568;
        }

        .sub-text {
            font-size: 14px;
            color: #718096;
            margin-top: 30px;
            padding-top: 20px;
            border-top: 1px solid #e2e8f0;
        }

        /* レスポンシブ対応(スマホ画面用) */
        @media screen and (max-width: 480px) {
            .maintenance-container {
                padding: 40px 20px;
            }
            h1 {
                font-size: 22px;
            }
            p {
                font-size: 14px;
            }
        }
    </style>
</head>
<body>

    <div class="maintenance-container">
        <div class="icon">🛠</div>
        
        <h1>メンテナンス中</h1>
        
        <p>
            ただいまシステムメンテナンスを行っております。<br>
            ご不便をおかけいたしますが、今しばらくお待ちください。
        </p>

        <p>
            <strong>再開予定:未定</strong>
        </p>

        <div class="sub-text">
            ※メンテナンス終了後に再度アクセスをお願いいたします。
        </div>
    </div>

</body>
</html>

EC-CUBEの不便さを感じる事案

EC-CUBEはオープンソースとして、それなりのシェアを誇っていましたが、正直ここ最近は当時ほどの勢いはないと思っています。

その理由としては、ECサイトとしてのプラットフォームの台頭。オープンソースではありませんが、同規模ならMakeshopやShopify。お手軽に始めるということならBASEやSTORESなどが人気です。

私自身担当することがあるのは上記プラットフォームばかりです。

オープンソースだからこそのランニングコストを抑えられますが、機能として不十分であったり基本機能とも思える機能が有料プラグインであったりとユーザー離れが起きるきっかけは散在しています。またアップデートするとしても、簡単にプラグインが動作保証外になったりと、運用していくと想定外のことから費用がかさむのが今のEC-CUBEという印象です。

またオープンソースの割にはそこまで情報が出回っていません。これは自社リソースで管理されているからなのか、単純に問題に直面すると別サービスに移行したのかは不明です。ただ個人的には、アップデート体制や管理コストを考えると他サービスを提案させていただく可能性が高いというのが

まとめ:EC-CUBE 3系:プラグイン不要でメンテナンスモードにする方法(管理画面は除外OK)

EC-CUBE 3系には標準のメンテナンス機能が備わっていないため、プラグインの不具合リスクを避けるなら、今回ご紹介した.htaccessによる制御が最も確実です。

一見複雑に見える記述ですが、「管理画面(/admin)を除外する」という条件を加えることで、ショップを閉じている間も商品の登録や設定変更などの準備を並行して進めることが可能になります。

オープンソースゆえの自由度は高い反面、こうした細かな運用設定に手間がかかるのがEC-CUBEの特徴でもあります。現在のECサイト運営において、工数とコストのバランスを考えた最適なプラットフォーム選びの一助となれば幸いです。

EC-CUBE 3系:プラグイン不要でメンテナンスモードにする方法(管理画面は除外OK)
  • バックアップが必須.htaccessはサイト全体に影響するため、必ず編集前のファイルを保存してから作業を行う。
  • 管理画面の除外設定RewriteCond %{REQUEST_URI} !/admin を記述することで、メンテナンス中も裏側での作業を止めない。
  • 画像やCSSの除外:メンテナンスページ自体が表示崩れを起こさないよう、画像やCSSファイル(静的ファイル)はリダイレクト対象から外す。
この記事をシェアする

コメント(承認制)

コメントする

目次