OnHandleRequest (проблема с запросом)
Доброго времени всем!
Подскажите пожалуйста, кто сталкивался.
Столкнулся с нестандартной ситуацией во время переноса сайта с кастомного движка (в дальнейшем донор) на Modx.
На доноре неправильная структура ссылки языковых версий. Во время формирования ссылки, язык добавляется в конец ссылки (пример: ссылка-на-сайт.ru/алиас/ru). Сайт уже устоялся и заказчик категорично пока что не хочет менять формирование ссылки, т.к. это повлияет на СЕО.
Еще небольшая особенность, если язык в запросе отсутствует, нужно 301ым перенаправлять его на русскую версию.
Вроде бы с задачей справился с плагином OnHandleRequest путем:
И все работает за исключением главной страницы.
На главной, во время очистки индификатора(метод _cleanResourceIdentifier) нужной страницы происходит:
Изначально думал, что вина в этом параметра friendly_urls_strict (мол, если в адресе index.php или еще что, то 301 редирект на каноничный адрес).
Проблему конечно решил:
Поэтому очень прошу помочь советом, как сделать тоже самое, незатронув ядро Modx.
Буду рад любому совету, благодарю за внимание.
Подскажите пожалуйста, кто сталкивался.
Столкнулся с нестандартной ситуацией во время переноса сайта с кастомного движка (в дальнейшем донор) на Modx.
На доноре неправильная структура ссылки языковых версий. Во время формирования ссылки, язык добавляется в конец ссылки (пример: ссылка-на-сайт.ru/алиас/ru). Сайт уже устоялся и заказчик категорично пока что не хочет менять формирование ссылки, т.к. это повлияет на СЕО.
Еще небольшая особенность, если язык в запросе отсутствует, нужно 301ым перенаправлять его на русскую версию.
Вроде бы с задачей справился с плагином OnHandleRequest путем:
$alias = $modx->getOption('request_param_alias', null, 'alias', true);
$request = &$_REQUEST[$alias];
$languages = array("/ru$/","/en$/","/de$/","/fr$/","/es$/","/it$/","/tr$/");
$request = preg_replace($languages, "", $request);+ редирект 301И все работает за исключением главной страницы.
На главной, во время очистки индификатора(метод _cleanResourceIdentifier) нужной страницы происходит:
if ($this->modx->getOption('base_url', null, MODX_BASE_URL) !== strtok($_SERVER["REQUEST_URI"],'?')) {
$this->modx->sendRedirect($this->modx->getOption('site_url', null, MODX_SITE_URL), array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
}Поэтому даже вырезая из запроса язык, система определяет эту страницу главной и переадресовывет на саму себя с 301 редиректом.Изначально думал, что вина в этом параметра friendly_urls_strict (мол, если в адресе index.php или еще что, то 301 редирект на каноничный адрес).
Проблему конечно решил:
/* if ($this->modx->getOption('base_url', null, MODX_BASE_URL) !== strtok($_SERVER["REQUEST_URI"],'?')) {
$this->modx->sendRedirect($this->modx->getOption('site_url', null, MODX_SITE_URL), array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
}*/
if (strlen(substr($_SERVER["REQUEST_URI"],1)) == '') {
$defaultUrl = $this->modx->getOption('site_url', null, MODX_SITE_URL) . 'ru';
$this->modx->sendRedirect($defaultUrl, array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
}Но править ядро MODX считаю неправильно, да и слетит в случае обновления.Поэтому очень прошу помочь советом, как сделать тоже самое, незатронув ядро Modx.
Буду рад любому совету, благодарю за внимание.
Техническая поддержка MODX
Сайт лежит, тормозит или остался без разработчика?
Переезд с MODX 2 на 3, PHP 7 на 8, скорость и безопасность. Поддержка со сроками и ответственностью, а не совет в чате.
Подробнее
Реклама
1
Комментарии: 1