YII2 sef urls construction

41 Views Asked by At

I have catalogue with products. Urls for products looks like this domain.com/adv?id=14792. I want to beautify urls like this domain.com/adv/14792.

In web.php I tried to like this

'urlManager' => [
 'enablePrettyUrl' => true,
 'showScriptName' => false,
 'enableStrictParsing' => true,
 'rules' => [
  'adv/<id:\d+>' => 'site/adv',
  '<alias:[\w-]+>' => 'site/<alias>',
 ],
],

and there is no result.

I tried another variant in rules block:

'rules' => [
  'adv/<id:\d+>' => 'adv',
  '<alias:[\w-]+>' => 'site/<alias>',
 ],

and urls start to look like I want. But on this link I get 404 page.

2

There are 2 best solutions below

0
user3774771 On BEST ANSWER

I solved my problem by myself. This is my urlmanager module now:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
      'adv/<id:\d+>' => 'site/adv',
      '<alias:[\w-]+>' => 'site/<alias>',
      '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
    ],

this construction build url from https://example.com/adv?id=123456 to https://example.com/adv/123456. In view link build with

Html::a($insideEl,Url::to(['adv','id' => $ladvert->id]))

and in siteController action is

actionAdv($id)

Thanx.

0
ieatbytes On

Please use action with adv so that it work.

    'rules' => [
  'adv/<id:\d+>' => 'adv/<add some action here>',
  '<alias:[\w-]+>' => 'site/<alias>',
 ],