Yii2 URL 制作 Slug 的路线 Url

Yii2 URL Route for make a Slug Url

我正在学习 yii2, 我在制作 url 路线时遇到问题。 这是我的 url 配置

'urlManager' => [
            'class' => 'yii\web\UrlManager',
            // Disable index.php
            'showScriptName' => false,
            // Disable r= routes
            // 'enableStrictParsing' => false,
            'enablePrettyUrl' => true,
            'rules' => array(                   
                'category/<id:\S+>' => 'category/detail',
                '<controller:\w+>/<id:\d+>' => '<controller>/view',
                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
                'request-password-reset' => 'site/request-password-reset',
                'reset-password/<token:\S+>' => 'site/reset-password',  
                'profile/<id:[0-9a-zA-Z\-]+>/?' => 'profile/user',  
                'logout' => 'site/logout',
                'login' => 'site/login',

            ),
        ],

问题出在配置文件路由中。 情况如下:

  1. http://localhost/myapps/profile/some-url/ -> 使用添加的斜线 url
  2. 结束
  3. http://localhost/myapps/profile/some-url -> url 末尾没有斜线不起作用,错误 404
  4. http://localhost/myapps/profile/someurl -> 不工作错误 404.
  5. http://localhost/myapps/profile/first-second-third -> 最后没有斜线的工作正常

我真的很困惑,我一直在这里寻找以前的问题,但没有尝试处理我的案例。

有人可以帮我解决问题吗?

只需将您的个人资料别名移至列表顶部:

'profile/<id:[0-9a-zA-Z\-]+>/?' => 'profile/user',
'category/<id:\S+>' => 'category/detail',  
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
'request-password-reset' => 'site/request-password-reset',
'reset-password/<token:\S+>' => 'site/reset-password',  
'logout' => 'site/logout',
'login' => 'site/login',

由于 '<controller:\w+>/<action:\w+>' => '<controller>/<action>' 是在 'profile/<id:[0-9a-zA-Z\-]+>/?' => 'profile/user' 之前定义的,它永远不会到达配置文件,因为它将它识别为 controller/action。