LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
26.05.2012, 14:36:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Криво открываются страницы при присутствии GET-параметров в URL  (Прочитано 1348 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Murz
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 41


« : 13.09.2010, 17:46:26 »

Столкнулся с проблемой что на сайте криво открываются страницы по ссылкам с контекстной рекламы (Яндекс.Директ, Google AdWords) и в результате выяснил, что проблема похоже в Joomla.
Например имеем страницу http://site.ru/content/blogcategory/9/36/ которая открывается нормально
При клике в Яндекс.Директ пользователь попадает на страницу http://site.ru/content/blogcategory/9/36/?_openstat=dGVzdDsxOzE1
Т.е. всё то же самое, но добавился ещё GET-параметр _openstat.
И в итоге вместо этой страницы Joomla открывает какую-то вообще левую!
Те же проблемы и с гуглом, т.к. он формирует ссылки тоже с GET-параметрами: http://site.ru/content/blogcategory/9/36/?utm_source=google&utm_medium=cpc&utm_campaign=company1

Нормально работают только ссылки на главную страницу.

Такая же проблема воспроизводится и на других сайтах где Joomla 1.0.x стоит и на официальном сайте joostina тоже, вот пример:
http://www.joostina.ru/content/view/26/41/ - страница "Планы по развитию."
http://www.joostina.ru/content/view/26/41/?_openstat=dGVzdDsxOzE1 - открывается уже страница "Документация"!
http://www.joostina.ru/content/view/26/41/?utm_source=google&utm_medium=cpc&utm_campaign=company1 - тоже "Документация".

Вариант с отключением ЧПУ работает, но мне не очень подходит, т.к. на этих урлах уже много чего завязано.

Подскажите пожалуйста, каким образом эту проблему можно решить?
Записан
Murz
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 41


« Ответ #1 : 18.10.2010, 15:37:03 »

Выяснил я наконец-то источник данной проблемы!
В файле includes/sef.php есть строка
Код:
$url_array = explode('/',$_SERVER['REQUEST_URI']);
Соответственно, она без разбору просто тупо делит всю строку на параметры по слешу.
И если в строке есть ещё и GET-параметры, например content/blogcategory/9/36/?_openstat=dGVzdDsxOzE1 то в обработку поступают и они, хотя не должны!
Итого, я добавил перед этой фунцией проверку на наличие GET-параметров и вырезание их из обработки. На всё остальное повлиять это не должно.

Для того чтобы исправить проблему необходимо строку
Код:
    $url_array = explode('/',$_SERVER['REQUEST_URI']);
заменить на:
Код:
  $url4parse = $_SERVER['REQUEST_URI'];
  if(strpos($url4parse,'?'))
    $url4parse =substr($url4parse,0,strpos($url4parse,'?'));
$url_array = explode('/',$url4parse);

У меня на всех сайтах после этих правок сразу всё заработало, побочных проблем никаких не обнаружил. Так что кто сталкивается с такой же проблемой - можете пользоваться.
Записан
Murz
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 41


« Ответ #2 : 19.10.2010, 14:32:56 »

Обнаружил что данный патч не срабатывает если включен компонент com_sef т.к. тот берёт всю обработку на себя.
Но для него тоже нашлась управа Wink
В файл components/com_sef/sef.php после строки
Код:
if ($mosConfig_sef) {
нужно добавить:
Код:
    $url4parse = $_SERVER['REQUEST_URI'];
    if(strpos($_SERVER['REQUEST_URI'],'?'))
      $_SERVER['REQUEST_URI'] =substr($_SERVER['REQUEST_URI'],0,strpos($_SERVER['REQUEST_URI'],'?'));
И после этого заработает.
Записан
Murz
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Сообщений: 41


« Ответ #3 : 05.03.2011, 17:04:22 »

Для Joomla 1.5 и многих других CMS, где есть схожая проблема - брутальное решение такое:
Код:
$_SERVER["QUERY_STRING"]=preg_replace('/(?:^|&)utm_[^=]+=[^&]+)/i','',$_SERVER["QUERY_STRING"]);
$_SERVER["REQUEST_URI"]=preg_replace('/([\?&]utm_[^=]+=[^&]+)/i','',$_SERVER["REQUEST_URI"]);
$_SERVER["QUERY_STRING"]=preg_replace('/(?:^|&)_openstat=[^&]+)/i','',$_SERVER["QUERY_STRING"]);
$_SERVER["REQUEST_URI"]=preg_replace('/([\?&]_openstat=[^&]+)/i','',$_SERVER["REQUEST_URI"]);

Это добавить в самое начало index.php после символов
Код:
<?
, работает для параметров utm_* и _openstat.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet