.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 というファイル名を通常サイトでもよく使うのでカスタムでアップロードしていたのか混乱していた。これが悩みの原因だった…。