サブディレクトリのEccubeを、.htaccessでトップにダイレクト

※この方法では、カート > 購入のところで、動きませんでした。

設計上、同じ処理になってないんでしょうね・・・
残念です。

 

今回、SSLが別ディレクトリー運用できない
GMOの腐ったサーバーだったので、

仕方なく、サブディレクトリで運用。

でも、URLが、不格好・・・

 

で、いろいろ、試してみた。
※実際には、サブディレクトリ「eccube」にあるものとする

> /data/config/config.php

  • define(‘HTTP_URL’, ‘https://shoroji.com/’);
  • define(‘HTTPS_URL’, ‘https://shoroji.com/’);
  • define(‘ROOT_URLPATH’, ‘/’);

と設定した場合、リンク先は、すべてルートを見に行くが、
ファイルが存在しないので、表示がされないので、

.htaccessでリダイレクトしてやる。

  • RewriteCond %{REQUEST_FILENAME} !-f
  • RewriteCond %{REQUEST_FILENAME} !-d
  • RewriteRule ^.*$ /eccube%{REQUEST_URI} [L]

ま、これは、わけないが、
実際には、外郭のテンプレートは表示されるものの、
メインであるボディーが表示されない。

エラーをみると、

2015/09/02 17:06:41 [/*/products/list.php] Warning(E_USER_WARNING): ページ情報を取得できませんでした。 on [C:\*\_data\class\helper\SC_Helper_PageLayout.php(58)] from 0.0.0.0
2015/09/02 17:06:41 [/*/products/list.php] Warning(E_USER_WARNING): メイン部のテンプレートが存在しません。[C:/*/_data/Smarty/templates/*/.tpl] on [C:\*\_data\class\helper\SC_Helper_PageLayout.php(65)] from 0.0.0.0
2015/09/02 17:06:41 [/*/products/list.php] Warning(E_USER_WARNING): Smarty error: unable to read resource: "C:/*/_data/Smarty/templates/*/.tpl" on [C:\*\_data\module\Smarty\libs\Smarty.class.php(1094)] from 0.0.0.0

問題点は、.tplの前がなく、
つまり、テンプレートファイルが見つからないというエラー。

 

/eccube/にインストールしている場合、
通常であれば、

  • $_SERVER[‘SCRIPT_NAME’] = /eccube/index.php
  • ROOT_URLPATH = /eccube/

となるので、
結果として、「index.php」が取り出されるのだけど、

今回、ルートで運用したいので、ROOT_URLPATH = /
としているため、処理がうまく出来ていない。

 

では、どうしたらいいか?

というと、
その書き換えをしている「SC_Helper_Pagelayout.php」を修正します。

実際には、function getPageProperties に与えられる、
第4パラメーター「$arrParams」に、
/eccube/index.php のまま渡されてくるので、これを、書き換えてやります。

 

↓を、「SC_Helper_Pagelayout_ex.php」(拡張クラス)に、追加。

class SC_Helper_PageLayout_Ex extends SC_Helper_PageLayout
{
 public function getPageProperties($device_type_id = DEVICE_TYPE_PC, $page_id = null, $where = '', $arrParams = array())
 {

## begin
 if (count($arrParams) > 0) {
 #var_dump(ROOT_URLPATH_redirect);
 #var_dump($_SERVER['SCRIPT_NAME']);
 $arrParams[0] = preg_replace('|^'. preg_quote(ROOT_URLPATH_redirect). '|', '', $_SERVER['SCRIPT_NAME']);
 }
 ## end

 $objQuery =& SC_Query_Ex::getSingletonInstance();
 $where = 'device_type_id = ? ' . (SC_Utils_Ex::isBlank($where) ? $where : 'AND ' . $where);
 if ($page_id === null) {
 $where = 'page_id <> ? AND ' . $where;
 $page_id = 0;
 } else {
 $where = 'page_id = ? AND ' . $where;
 }
 $objQuery->setOrder('page_id');
 $arrParams = array_merge(array($page_id, $device_type_id), $arrParams);
 #var_dump($arrParams);

 return $objQuery->select('*', 'dtb_pagelayout', $where, $arrParams);
 }
}

大事な部分は、 begin~endの

$arrParams[0] = preg_replace('|^'. preg_quote(ROOT_URLPATH_redirect). '|', '', $_SERVER['SCRIPT_NAME']);

LC_Page.php [102行目]で、
$_SERVER[‘SCRIPT_NAME’]が第4パラメーターに渡され、
SC_Helper_PageLayout.php [50行目]で、
ROOT_URLPATH を置換して、

dtb_pagelayout上のテンプレート名を
引っ張ってきているという流れなので、

 

ROOT_URLPATHを、Eccube上関係ない定数
「ROOT_URLPATH_redirect」に置き換えて、URLを補正した次第です。

 

※ROOT_URLPATH_redirectは、環境によって異なるだろうから、
/data/config/config.phpで、定義しています。

  • define(‘ROOT_URLPATH_redirect’, ‘/eccube/’);

以上。

しかし、

ずいぶん、Eccube通になってきたww

PS.
答えじゃなくて、ヒントになる程度に、書いてます。
見る人が見たら、答えなんだけどw

.

サブディレクトリのEccubeを、.htaccessでトップにダイレクト
Tagged on: