*** Вариант
1 *** - создать специальное правило для URL.
<?php
namespace app\components;
use yii\web\UrlRuleInterface;
use yii\base\Object;
class JoomlaUrlRule extends Object implements UrlRuleInterface
{
public function createUrl($manager, $route, $params)
{
return false;
}
public function parseRequest($manager, $request)
{
$it_joomla_url = $request->getPathInfo()===''
&& $request->getQueryParam('option')==='com_content';
if (!it_joomla_url) {
return false;
}
$view = $request->getQueryParam('view');
if (empty($view)) {
return false;
}
return ["$view/view", $request->queryParams];
}
}
Прописать его в конфиге приложения:
[
'components' => [
'urlManager' => [
// ...
'rules' => [
['class' => 'app\components\JoomlaUrlRule'],
// ...
],
],
],
]
Yii2: Разбор и генерация URL
*** Вариант
2 *** - решить задачу настройками веб-сервера.
Для веб-сервера Apache - добавьте в файл .htaccess строки:
RewriteCond %{THE_REQUEST} index.php [NC]
RewriteCond %{QUERY_STRING} option=com_content [NC]
RewriteCond %{QUERY_STRING} view=category [NC]
RewriteRule (.*) /category/view/ [L,R=301,QSA]
RewriteCond %{THE_REQUEST} index.php [NC]
RewriteCond %{QUERY_STRING} option=com_content [NC]
RewriteCond %{QUERY_STRING} view=article [NC]
RewriteRule (.*) /article/view/ [L,R=301,QSA]
Информация о правилах...Это два набора правил редиректа, для ссылок вида:
index.php?option=com_content&view=category...
index.php?option=com_content&view=article...
Для изначального URL запроса - порядок параметров значения не имеет.
К примеру, должны работать варианты:
index.php?option=com_content&view=article&id=1
index.php?id=1&view=article&option=com_content
По ссылке index.php?option=com_content&view=article&id=1
будет редирект на /article/view?option=com_content&view=article&id=1
Все параметры запроса затем передаются в контроллер, обрабатывать можно только нужные параметры, к примеру, только id.
Но для
SEO рекомендую более строгие правила:
RewriteCond %{THE_REQUEST} index.php [NC]
RewriteCond %{QUERY_STRING} option=com_content [NC]
RewriteCond %{QUERY_STRING} view=category [NC]
RewriteCond %{QUERY_STRING} id=(\d+) [NC]
RewriteRule (.*) /category/view?id=%1 [L,R=301]
RewriteCond %{THE_REQUEST} index.php [NC]
RewriteCond %{QUERY_STRING} option=com_content [NC]
RewriteCond %{QUERY_STRING} view=article [NC]
RewriteCond %{QUERY_STRING} id=(\d+) [NC]
RewriteRule (.*) /article/view?id=%1 [L,R=301]
По ссылке index.php?option=com_content&view=article&id=1 будет редирект на /article/view?id=1