zyto

OC.CMS/PRO 2.1.0.2.X не работают во вложенном каталоге

Recommended Posts

Помогите решить проблему. Попробовал на Opencart.CMS и PRO версий 2.1.0.2.1 и 2.1.0.2.2 - не могу заставить работать в подкаталоге.

 

Что делаю:

1. устанавливаю чистый Opencart.pro в какую-нибудь папку на локальном вэб-сервере, в моём случае это mh4.loc

К папке привязан одноимённый локальный домен. Полный путь к каталогам сайта выглядит так: C:\apache\mh4.loc\www\

2. Установка проходит нормально, проверяю что работает и админка и фронт.

3. Создаю подкаталог shop, переношу в него все файлы сайта

4. в файле config.php добавляю /shop/ везде где нужно, в итоге файл выглядит так:

Скрытый текст

<?php
// HTTP
define('HTTP_SERVER', 'http://mh4.loc/shop/');

// HTTPS
define('HTTPS_SERVER', 'http://mh4.loc/shop/');

// DIR
define('DIR_APPLICATION', 'C:/apache/mh4.loc/www/shop/catalog/');
define('DIR_SYSTEM', 'C:/apache/mh4.loc/www/shop/system/');
define('DIR_LANGUAGE', 'C:/apache/mh4.loc/www/shop/catalog/language/');
define('DIR_TEMPLATE', 'C:/apache/mh4.loc/www/shop/catalog/view/theme/');
define('DIR_CONFIG', 'C:/apache/mh4.loc/www/shop/system/config/');
define('DIR_IMAGE', 'C:/apache/mh4.loc/www/shop/image/');
define('DIR_CACHE', 'C:/apache/mh4.loc/www/shop/system/storage/cache/');
define('DIR_DOWNLOAD', 'C:/apache/mh4.loc/www/shop/system/storage/download/');
define('DIR_LOGS', 'C:/apache/mh4.loc/www/shop/system/storage/logs/');
define('DIR_MODIFICATION', 'C:/apache/mh4.loc/www/shop/system/storage/modification/');
define('DIR_UPLOAD', 'C:/apache/mh4.loc/www/shop/system/storage/upload/');

 

5. Меняю файл admin/config.php, в итоге файл выглядит так:

Скрытый текст

<?php
// HTTP
define('HTTP_SERVER', 'http://mh4.loc/shop/admin/');
define('HTTP_CATALOG', 'http://mh4.loc/shop/');

// HTTPS
define('HTTPS_SERVER', 'http://mh4.loc/shop/admin/');
define('HTTPS_CATALOG', 'http://mh4.loc/shop/');

// DIR
define('DIR_APPLICATION', 'C:/apache/mh4.loc/www/shop/admin/');
define('DIR_SYSTEM', 'C:/apache/mh4.loc/www/shop/system/');
define('DIR_LANGUAGE', 'C:/apache/mh4.loc/www/shop/admin/language/');
define('DIR_TEMPLATE', 'C:/apache/mh4.loc/www/shop/admin/view/template/');
define('DIR_CONFIG', 'C:/apache/mh4.loc/www/shop/system/config/');
define('DIR_IMAGE', 'C:/apache/mh4.loc/www/shop/image/');
define('DIR_CACHE', 'C:/apache/mh4.loc/www/shop/system/storage/cache/');
define('DIR_DOWNLOAD', 'C:/apache/mh4.loc/www/shop/system/storage/download/');
define('DIR_LOGS', 'C:/apache/mh4.loc/www/shop/system/storage/logs/');
define('DIR_MODIFICATION', 'C:/apache/mh4.loc/www/shop/system/storage/modification/');
define('DIR_UPLOAD', 'C:/apache/mh4.loc/www/shop/system/storage/upload/');
define('DIR_CATALOG', 'C:/apache/mh4.loc/www/shop/catalog/');

 

6. Меняю файл .htaccess, вместо RewriteBase / пишу RewriteBase /shop/

 

Захожу в админку по адресу mh4.loc/shop/admin/ - без проблем.

Пытаюсь зайти на главную страницу mh4.loc/shop/ - редиректит на главную страницу домена - mh4.loc и показывает что-то типа такого:

http://prntscr.com/k1hpf8

 

При этом версия 2.3.х без проблем перенеслась по такому же алгоритму.

Что можно подковырять для исправление такой ситуации?

 

PS пробовал на хостинге - то же самое, т.е. проблема не в настройках локального вэб-сервера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо! Почти помогло.
Единственное уточнение, у вас в коде:

Скрытый текст

//fix subfolder
+		$path = rtrim($url_info['path'], '/index.php');

 

При таком варианте у меня не работало, потому что после вычисления получался $path = "sho" (вместо shop)

На всякий случай вот скрин из отладчика:

http://prntscr.com/k1m55r

 

Это от версии PHP зависит или баг?
Сделал так:

Скрытый текст

-		$path = rtrim($url_info['path'], '/index.php');

+		$path = rtrim($url_info['path'], 'index.php');

-		$seo_url = $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . $path . '/' . $seo_url;

+		$seo_url = $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . $path . $seo_url;

 

На первый взгляд работает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
17 часов назад, zyto сказал:

Кого куда тянет? У меня на локалке стоит 5.х, попробовал в песке на 4.4.9 и 7.2.4 - результат одинковый, т.е. от версии РНР видимо не зависит...

Понятно.
Можно попробовать ещё это:

rtrim($url_info['path'], '/index.php');

на такое поменять:

Скрытый текст

str_replace('/index.php', '', $url_info['path']);
или
stristr($url_info['path'], '/index.php', true);

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, так пожалуй лучше.
Надо бы это в новый релиз добавить.

 

2.1.0.2.1 Так и не удалось заставить работать.

Обновился до 2.1.0.2.2 - на первый взгляд работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу