Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Незначительная ошибка в seo_pro


dii

Recommended Posts

Имеется:

- пробная установка ocStore v1.0.1 релиз в раздел сайта (по урлу вида http://thesite.dom/teststore/)

- включены ЧПУ типа SeoPro

- заданы алиасы категориям и товарам

- .htaccess содержит обычное

...

RewriteEngine On
RewriteBase /teststore/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*) index.php?_route_=$1 [L,QSA]

...

При попытке перейти по ЧПУ-ссылке категории вида http://thesite.dom/teststore/testcategory/

получаем диагностику redirect loop в браузере, а апачев accesslog пишет что-то вроде:

"GET /teststore/testcategory/ HTTP/1.1" 301 -
"GET /teststore/testcategory/ HTTP/1.1" 301 -
"GET /teststore/testcategory/ HTTP/1.1" 301 -
"GET /teststore/testcategory/ HTTP/1.1" 301 -
"GET /teststore/testcategory/ HTTP/1.1" 301 -
...
и так много раз подряд.

В файле catalog/controller/common/seo_pro.php за это ответственен такой участок кода:

class ControllerCommonSeoPro extends Controller {
	...
	skipped
	...
	private function validate($link) {
		...
		skipped
		...
		$seo_url = $this->url->link($this->request->get['route'], $args, $scheme);

		$seo_url = str_replace('&', '&', $seo_url);

		if ($link != rawurldecode(ltrim(parse_url($seo_url, PHP_URL_PATH), '/'))) { // <== вот тут не сработало условие
			$get[] = 'route';

			$data = array_diff_key($this->request->get, array_flip($get));

			if (count($data)) {
				$seo_url .= (strpos($seo_url, '?') === false) ? '?' : '&';
				$seo_url .= urldecode(http_build_query($data));
			}

			header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');

			$this->response->redirect($seo_url);
		}
	}
}
У себя исправил так:

class ControllerCommonSeoPro extends Controller {
	...
	skipped
	...
	private function validate($link) {
		...
		skipped
		...
		$seo_url = $this->url->link($this->request->get['route'], $args, $scheme);

		$seo_url = str_replace('&', '&', $seo_url);

		$linkpfx = ltrim(parse_url($this->config->get('config_url'), PHP_URL_PATH), '/');

		if ($linkpfx.$link != rawurldecode(ltrim(parse_url($seo_url, PHP_URL_PATH), '/'))) {
		//if ($link != rawurldecode(ltrim(parse_url($seo_url, PHP_URL_PATH), '/'))) {
			$get[] = 'route';

			$data = array_diff_key($this->request->get, array_flip($get));

			if (count($data)) {
				$seo_url .= (strpos($seo_url, '?') === false) ? '?' : '&';
				$seo_url .= urldecode(http_build_query($data));
			}

			header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');

			$this->response->redirect($seo_url);
		}
	}
}
  • +1 1
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.