Переписать пользовательские URL-адреса с помощью Joomla SEF

#php #.htaccess #joomla #joomla1.7 #joomla-sef-urls

#php #.htaccess #joomla #joomla1.7 #joomla-sef-urls

Вопрос:

Я пытаюсь разобраться с переписыванием некоторых URL-адресов внутри Joomla! 1.7 с включенными функциями SEF, но, похоже, не могу понять это:

Существует следующий URL-адрес SEF (пункт меню):

website.com/local/amsterdam

Чего я хотел бы, так это следующего:

http://website.com/local/amsterdam/trends (несуществующий) для визуализации http://website.com/local/amsterdam?show=trends при этом все еще отображается первый URL-адрес.

При работе с .htaccess работает следующее (но не отображается SEF URL):

 RewriteRule ^local/amsterdam/trends$ index.php?option=com_contentamp;view=articleamp;id=14amp;Itemid=176amp;show=trends [L]
 

Но это не:

 RewriteRule ^local/amsterdam/trends$ local/amsterdam?show=trends [L]
 

Я надеюсь найти решение без использования идентификатора, чтобы оно динамически отображало правильную страницу для всех городов. Я был бы признателен за любые мысли о том, как сделать это в .htaccess, а также за любые другие решения для достижения этой цели! Заранее спасибо.

Ответ №1:

Хотя я изначально искал решение для перезаписи с модулями, я нашел способ добиться того же, изменив (ядро) Joomla! маршрутизатор.

В строке 47 из includes/router.php после:

 $path = substr_replace($path, '', 0, strlen(JURI::base(true)));
 

Я добавил следующее:

 $subpages = array("trends","other"); //Add URL segments you want to reroute
foreach ($subpages as $subpage):            
     if (strstr($path, "/".$subpage)) :
          $path = str_replace("/".$subpage, "", $path);
          $vars['show'] = $subpage;
     endif;
endforeach;
 

Теперь при загрузке http://www.website.com/local/amsterdam/trends , этот URL-адрес отображается во время просмотра страницы http://www.website.com/local/amsterdam на самом деле загружается с параметром ?show=trends .

Для меня это более гибкое решение, чем использование mod-rewrite, даже если основной файл изменен. Возможно, вы захотите использовать некоторые условные операторы для запуска этого кода только в определенных условиях. Надеюсь, это поможет.