こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
PHPエンジニアとして9年~の経験があります。
今回は
ECCUBE稼働中サイトを、一旦ネットショップやめるからアクセスがあったらメンテナンスページ(ただのHTML)にリダイレクトさせてほしいよ!
でも管理画面には一応アクセスできるようにしてほしいよ!
を叶える方法の紹介です。
…通常のサイトのように、簡単にはいきませんでした。
通常の場合
よくあるサイトだったら、このフォルダ以下にアクセスしたら指定場所にリダイレクトしてね!っていうのをhtaccessで書けば終了。
3系の場合
保存場所はhtmlフォルダ内に.htaccessを格納。
こんな感じになると思う。
<ifmodule mod_rewrite.c="">
#403 Forbidden対応方法
#ページアクセスできない時シンボリックリンクが有効になっていない可能性あります、
#オプションを追加してください
#Options +FollowSymLinks +SymLinksIfOwnerMatch
RewriteEngine On
# Authorization ヘッダが取得できない環境への対応
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
# さくらのレンタルサーバでサイトへのアクセスをSSL経由に制限する場合の対応
# RewriteCond %{HTTP:x-sakura-forwarded-for} !^$
# RewriteRule ^(.*) - [E=HTTPS:on]
##### ▼ここから 再開するときはこの記述を有効にする▼ #####
# 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]
##### ▲ここまで 再開するときはこの記述を有効にする▲ #####
##### ▼ここから一時休止中の記述 再開するときはこの記述を削除する▼ #####
# /htmlなど、トップページのアクセスを除外するため、RewriteCond %{REQUEST_FILENAME} !-d (ディレクトリ許可)は除外
# cssなど読み込めないと困るので、ファイル除外は入れる
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpe?g|css|ico|js|svg)$ [NC]
# /admin以外がリダイレクト対象
RewriteCond %{REQUEST_URI} !(/admin)
# リダイレクト先を指定する
# 今回は一時的なので302にした
RewriteRule ^(.*)$ /xxxxxx.html [R=302,L]
# 上記の条件にかからなかったもの(/admin以下のURL)は通常と同様の処理を行う
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>
/html/adminで管理画面だけど、adminって物理フォルダがない…。
それに気づくまでに遅かった。
それからトップページはリダイレクトできたけど、その他ページはリダイレクトできてないじゃん!っていうのにはまった。
正規表現ってわからなくなるよ…
RewriteRuleは上から順番に処理していって、当てはまらなければ処理しないんだね。
当てはまったらそこで処理終了なんだね。そこを考えて書かないといけない。
2系の場合 ※今回は2.3.3だった
※他の2系は知らないのでそのまま適用できるか不明です
3系と同じく、保存場所はhtmlフォルダ内に.htaccessを格納。
<ifmodule mod_rewrite.c="">
##### ▼ここから一時休止中の記述 再開するときはこの記述を削除する▼ #####
# 必要に応じて入れる
# Options +FollowSymLinks +SymLinksIfOwnerMatch
RewriteEngine On
# /htmlなど、トップページのアクセスを除外するため、RewriteCond %{REQUEST_FILENAME} !-d (ディレクトリ許可)は除外
# phpページにアクセスしていることも多いのでファイル RewriteCond %{REQUEST_FILENAME} !-f も除外
RewriteCond %{REQUEST_FILENAME} !^(.*)\.(gif|png|jpe?g|css|ico|js|svg)$ [NC]
# /adminとメンテナンスページはリダイレクト対象外
RewriteCond %{REQUEST_URI} !(/admin)
RewriteCond %{REQUEST_URI} !(/xxxxxxxxxx.html)
# リダイレクト先を指定する
RewriteRule ^(.*)$ /xxxxxxxxxx.html [R=302,L]
</ifmodule>
##### ▲ここまで一時休止中の記述 再開するときはこの記述を削除する▲ #####
以上。
素朴な疑問
ECCUBEってメンテナンス用ページにリダイレクトさせるって処理、簡単にできないものなのか…?
メンテナンス中なんてたっくさんあるだろうにどうして標準実装じゃなくてプラグイン頼みなのか。
私が調べられなかっただけで実はあるのかな?
結構シェアがあるっぽいオープンソースなのに情報がいまいちなのはなぜ?
2022年2月時点のECCUBE
4系になってクラウド版まで登場してるのね。それでもこの記事に一定のアクセスがあるということは…まだ市場には2系、3系が残っている?
2系はセキュリティも色々ありますし、さすがにお金をかけてちゃんと更新した方が良いと思います…!