@EVOSandru6

Почему Yii2 Чпу адреса с id не работают?

Добрый день,

Такая проблема, не получается настроить ЧПУ с id . Улетаю в 404

.htaccess в корне сайта:

AddDefaultCharset utf-8
<IfModule mod_rewrite.c>
   Options +FollowSymlinks
   RewriteEngine On
</IfModule>

<IfModule mod_rewrite.c>
   RewriteCond %{REQUEST_URI} ^/.*
   RewriteRule ^(.*)$ web/$1 [L]

   RewriteCond %{REQUEST_URI} !^/web/
   RewriteCond %{REQUEST_FILENAME} !-f [OR]
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^.*$ web/index.php
</IfModule>


И еще .htaccess в папке web:

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php


В config/web.php:

...
'components' => [
        'request' => [
            'cookieValidationKey' => '****',
            'baseUrl' => '',
        ],
...
]
...
'urlManager' => [
			'showScriptName' => false,
			'enablePrettyUrl' => true,
			'rules' => [
                              'login' => 'auth/login',
                               'signup' => 'auth/signup',
                               'profile' => 'users/profile',
                               'password' => 'auth/password',

/////////////////////////

                                '<module:\w+>/<controller:\w+>/<id:\d+>' => '<module:\w+>/<controller>/view',
                                '<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<module:\w+>/<controller>/<action>',
                                '<module:\w+>/<controller:\w+>/<action:\w+>' => '<module:\w+>/<controller>/<action>',

                                '<controller:\w+>/<id:\d+>' => '<controller>/view',
                                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',

                                '<action>'=>'site/<action>',
                                '' => 'site/index',
			]
		],
		...


Следующие правила отрабатываются корректно:
'login' => 'auth/login',
 'signup' => 'auth/signup',
 'profile' => 'users/profile',
 'password' => 'auth/password',


Если я ввожу в браузере левую часть, то получаю желаемую правую, но вот с данным фрагментов - проблема:

'<module:\w+>/<controller:\w+>/<id:\d+>' => '<module:\w+>/<controller>/view',
                                '<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<module:\w+>/<controller>/<action>',
                                '<module:\w+>/<controller:\w+>/<action:\w+>' => '<module:\w+>/<controller>/<action>',

                                '<controller:\w+>/<id:\d+>' => '<controller>/view',
                                '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',


Адреса вида:
domen/pages/2
domen/pages/view/2
domen/pages/update/2

Уводят в:

Not Found (#404)
The requested page does not exist.


Через {update/view}?id={id} все работает

Много просмотрел, прочитал. Но все бестолку(

Помню, в первой версии такой проблемы у меня не было.

Подскажите пожалуйста, мастера - по какой причине у меня может быть данная проблема?
  • Вопрос задан
  • 350 просмотров
Решения вопроса 1
qonand
@qonand
Software Engineer
проблема в том что у Вас не верная последовательность правил, должна быть например такой:
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>'
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',

'<module:\w+>/<controller:\w+>/<id:\d+>' => '<module:\w+>/<controller>/view',
'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module:\w+>/<controller>/<action>',
'<module:\w+>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<module:\w+>/<controller>/<action>',
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы