.htaccessリダイレクトで特定URLや/index.phpだけ301リダイレクト

ドメイン/index.phpドメイン/のみのURL両方が別titleタグでGoogleにインデックスされているEC-CUBEで作ったサイトがある。/index.phpの方はリンクしてるところもないのに何でコッチもインデックスされているのかは不明。もちろん表示される内容は一緒である。

前述の全てのディレクトリの/index.phpと付くものを.htaccessでリダイレクトする方法では、EC-CUBEでいろいろな問題があることをお伝えした。さらに、

  1. カートを購入完了まで進めない

という、とんでもないことまで起こることも解りの絶対にやっちゃ駄目。

それでも何とか、ドメイン/index.phpを/のみに統一しようということで、全てのディレクトリではなく、トップドメイン/index.phpだけを.htaccessリダイレクトできないか模索。できた。

RewriteRule ^index.php http://ec-cube.webtex.jp/ [R=301,L]

これを.htaccessに記述すれば、ドメイン/index.phpのところだけをリダイレクトするので、EC-CUBEの問題は起こらない。

さらに、特定のディレクトリ例えば/shop などでやっている人も多いと思うが、その時は、

RewriteRule ^shop/index.php http://ec-cube.webtex.jp/shop/ [R=301,L]

これで、大丈夫ですね。

たまたまindex.phpのありなし両方でtitleタグ内容も変更カスタマイズした前後のタイミングで、別titleタグで検索エンジンにキャッシュされてるという状況がどうしも気持ち悪かったので、いろいろな調べをしたわけだが、特にEC-CUBE側の不具合やエラーの問題でもないので、実際には全く気にすることではない。

.htaccessでindex.phpを/スラッシュのみにリダイレクト

よく、.htaccessで/index.htmlなどのURLを/以降ないURLに
統一するためのリダイレクトを使うのが、それが原因で不具合…後述。

http://abc.com/index.html →  http://abc.com/
http://abc.com/index.php →  http://abc.com/

こういった場合は、/index.htmlと/のみがどちらでも同じページに
アクセスされるので、/のみに統一するために.htaccessに

RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.php?\ HTTP/
RewriteRule ^(.*)index\.php?$ http://ec-cube.webtex.jp/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*index\.html?\ HTTP/
RewriteRule ^(.*)index\.html?$ http://ec-cube.webtex.jp/$1 [R=301,L]

と記述して、どちらかに統一することが多い。

コレをEC-CUBEのインストールしてあるドメイン直下に設定してみたのだが、いろいろなエラーが発覚。やらない方が良い。

  1. オーナーズストアの購入商品一覧を取得するが無反応
  2. デザイン管理でブロックのレイアウト設定が不可能に

などの不具合があったので、.htaccessのindex.html省略方法は辞めた方がいいですね。まだまだ不具合エラーはありそうなので、EC-CUBEインストールサイトではやらないこと。

PayPal決済モジュールは1つのみ?

PayPal決済モジュールは、複数設定できないようである。

発送方法の地域別をある商品は送料1地域、ある商品は送料2地域
などの切り替えは支払を追加して、送料選択を変更すれば対応できるが、
PayPal決済を複数持つことはできなく、
PayPal決済の設定は、Ownwers Storeからやるしかないので、
支払方法で、PayPalなどと名前を付けて支払方法に追加しても、
PayPal決済は機能しない。

EC-CUBEでは支払方法にペイパル決済を複数持つことはできない。
のだろう。

EC-CUBE titleタグ【TOPページ】を消し任意のタイトルに

EC-CUBE 2.4.4にて。

/class/pages/LC_Page_Index.php
の48行目に

function init() {
parent::init();
$this->tpl_mainpage = ‘top.tpl’;
$this->tpl_column_num = 3;
$this->tpl_title =  ‘TOPページ’;
}

$this->tpl_title =  ‘TOPページ’;を追加する。

そして、
テンプレートのパッケージにある site_frame.tpl
のtitleタグに当たる部分を

<!–{if $tpl_title == “商品一覧ページ”}–><title><!–{$tpl_subtitle|escape}–> | <!–{$arrSiteInfo.shop_name|escape}–></title><!–{elseif $tpl_title == “TOPページ”}–><title>任意のタイトル</title><!–{else}–><title><!–{$tpl_title|escape}–> | <!–{$arrSiteInfo.shop_name|escape}–></title><!–{/if}–>

とする。デフォルトではカテゴリーページは全て同じタイトルになってしまうが、これでカテゴリ名もtitleタグに反映される。しかし、第二カテゴリは第一カテゴリ名のままだが…。

  1. 第一カテゴリ名は出る。
  2. トップページはショップ名に関係なく任意に
  3. それ以外は、タイトル | ショップ名 になる

ここで商品詳細を取り除けてる訳ではない。

EC-CUBE title 【商品詳細】 を消す取り除く方法とやり方

EC-CUBE 2.4.4での事象

/class/pages/products/LC_Page_Products_Detail.php
の253行目と458行目にある商品詳細 を取り除き、再度アップロード。

$this->tpl_title = “商品詳細 “. $this->arrProduct[“name”];

TOPページのカスタマイズと混同しがちだが、どうやらあっちの、if のトップページでもなく、一覧でもないということのelseの頭に商品詳細 が付くものなので、この方法だけなのだろう。

CSSのデフォルト設定どうだったっけ?

触っていないと忘れちゃうことが多いのがEC-CUBEのこと。
初期のCSSがどうなっているのか、おさらい。

CSSのlinkは1つだけ、

<link rel=”stylesheet” href=”/user_data/css/common.css” type=”text/css” media=”all” />

common.cssの中身は、

@charset “utf-8”;
@import url(“../packages/default/css/import.css”);

上記のdefaultはテンプレートパッケージ名によって変わる。

/css/import.css 自ら作ったものではなく、最初からある物。
import.css というファイル名を通常サイトでもよく使うのでカスタムでアップロードしていたのか混乱していた。これが悩みの原因だった…。

オーナーズストアで購入商品一覧を取得するが表示されないエラー

PayPal決済モジュールなど、オーナーズストアで購入した物は、
管理画面のOWNERS STOREをクリックして購入商品一覧をする。

しかし、パーミッションが原因で《購入商品一覧を取得する》 を
クリックしてもウンともスンともしない場合がある。
ownersstore.js.phpに接続できないのが原因でパーミッションを
変更することで、オーナーズストアとサーバー接続できる。

user_data 755
user_data/packages 755
↓テンプレート変更後は基本この3つを変える
user_data/packages/template_name 755
user_data/packages/template_name/js 755
user_data/packages/template_name/js/ownersstore.js.php 644

グリーン文字のtemplate_nameは、テンプレートカスタマイズする毎に
777になったりするので、カスタマイズ後にはまたパーミッションを
いじらなくてはならない。

777でダメで755でOKというのがよく分からないが、
オーナーズストアがおかしかったらtemplate_nameとjsフォルダ755
ownersstore.js.phpを644にする。

または、認証キーの設定が正しいかもう一度見てみる。

EC-CUBEでポイント設定・ポイント機能を使用しない

EC-CUBEでは、デフォルトでポイント機能があり初期では機能しているし、ポイントの表示がされる。

基本情報管理で、ポイント設定の
ポイント付与率 *0%
会員登録時付与ポイント *0pt
にしても、ポイントは商品ページで0ポイントと表示される。テンプレートをカスタマイズして、表示を消す方法もあるが、基本的には、

システム設定→パラメータ設定→USE_POINTを
tureからfalseに変更して登録保存すれば、 表示されないしポイントの機能は働かなくなる。

商品ページのポイント表示が消えるのを確認して完了です。

一覧メイン画像・詳細-メイン画像・メイン拡大画像の初期値サイズを変更

EC-CUBEの初期設定の画像サイズを変更する

data/cache/mtb_constants.phpから変更することもできるが、
前回のエントリーで記載した通り、古いキャッシュファイルで上書き
アップロードしてしまうと、EC-CUBE全体がクラッシュしてしまいます。
また、キャッシュファイルが更新されると元の初期値に戻ってしまう。

初期の値

詳細-メイン拡大画像[500×500] 拡大表示を設定してある場合に表示
一覧-メイン画像[130×130] カテゴリ一覧・検索結果ページで表示
詳細-メイン画像[260×260] 商品詳細のページで表示

基本的には、システム設定 > パラメータ設定から、

LARGE_IMAGE_WIDTH
LARGE_IMAGE_HEIGHT
SMALL_IMAGE_WIDTH
SMALL_IMAGE_HEIGHT
NORMAL_IMAGE_WIDTH
NORMAL_IMAGE_HEIGHT

を管理画面から設定するのが、上策ということになります。

data/mtb_constants_init.phpにも設定情報が記載されていて、
ここでも設定できそうですが、これに値を設定して
アップロードしても反映されない。

キャッシュの更新時などにこの値が設定されるものと思われるが、
現状パラメータ設定から設定すれば、すぐに反映されるので、
一覧メイン画像・詳細-メイン画像・メイン拡大画像の
初期値サイズを変更はパラメータ設定からやっている。

危険!dataフォルダの中身を古いファイルで上書きアップロード

商品詳細や商品一覧のメイン画像サイズの変更のやり方は後ほど投稿するとして、今回はPHPエラーでいきなりショップにアクセスできない、管理画面の画像リンクが外れておかしくなる現象について。

デフォルトの商品登録の商品画像サイズを変更しようとして、
dataフォルダ内の data/cache/mtb_constants.php を編集してアップロード。

とくに気にもしてなく、上書きアップロードしたら全ページPHPエラー…。

mtb_constants.phpの最新ファイルがローカルにも、リモートにもない。

どうしよう…。

EC-CUBEをダウンロードしてdata/cacheを見たら空っぽ。

どうしましょう…。

よくよく見るとcache/mtb_constants.phpとキャッシュというフォルダだから一時的なファイルだと思い、思い切ってサーバー上のmtb_constants.phpを削除。そして、ショップにアクセスしてみると表示された!でも何かおかしい…。管理画面に入ってみても外れていた画像は戻っている。テンプレート設定がデフォルトになっていたので、最新に設定。これでショップも元に戻って事なきを得た。

まとめ。
mtb_constants.phpはキャッシュがどんどん新しくなっていて、それを古いファイルで上書きしてしまうと、全体的にエラーになるのでdataフォルダ内は要注意。

dataフォルダの中身を古いファイルで上書きアップロードはキケン。