Делаем URL в Yii человеко-понятными (ЧПУ)
По-умолчанию Yii генерирует URL вида
Например, адрес стандартной страницы логина будет выглядеть так:
Это означает, что будет вызван метод actionLogin контроллера SiteController.
Посмотрим, как можно преобразовать этот URL в человеко-понятный(ЧПУ). Более того, постараемся придать ему такой вид, как будто это статическая страница.
Эта задача включает в себя три этапа:
1.) Избавиться от видимого в URL параметра GET-запроса;
2.) Убрать «index.php» из URL;
3.) Добавить расширение .html в конце.
Прежде всего нужно найти следующий код:
и раскомментировать его.
Строка
решает нашу первую задачу. Она включает так называемый path-формат отображения URLов. URL /index.php?r=site/login будет выглядеть теперь как /index.php/site/login.
Теперь избавимся от index.php. Первым делом нужно разрешить перезапись URLов в настройках http-сервера. Если вы используете Apache, для этого достаточно создать в корневом каталоге сайта файл .htaccess с таким содержанием:
Теперь сконфигурируем свойство showScriptName компонента urlManager таким образом:
Адрес страницы логина сократился до /site/login. Это уже совершенно дружественный пользователю «человеко-понятный» URL, и на этом можно остановиться.
Но мы пойдём ещё дальше и добавим к адресу каждой страницы расширение «html», чтобы при взгляде на адресную строку у не слишком искушённого пользователя не возникало даже мысли о том, на каком движке или фреймворке написан этот сайт. Это статические html-страницы — и всё тут! Конечно, наша истинная цель заключается не в том, чтобы обманывать неискушённых пользователей, а в том, чтобы потрафить вкусам поисковых систем и придать нашим страницам более SEO-дружественный вид.
Для этого добавим в urlManager следующее правило:
Полный код будет выглядеть так:
Как видите, ЧПУ в фреймворке Yii — это не сложно, хотя потребовалось небольшое вмешательство в настройки http-сервера.
/index.php?r=controller/action.
Например, адрес стандартной страницы логина будет выглядеть так:
/index.php?r=site/login.
Это означает, что будет вызван метод actionLogin контроллера SiteController.
Посмотрим, как можно преобразовать этот URL в человеко-понятный(ЧПУ). Более того, постараемся придать ему такой вид, как будто это статическая страница.
Эта задача включает в себя три этапа:
1.) Избавиться от видимого в URL параметра GET-запроса;
2.) Убрать «index.php» из URL;
3.) Добавить расширение .html в конце.
Прежде всего нужно найти следующий код:
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'/'=>'/view',
'//'=>'/',
'/'=>'/',
),
),
'urlFormat'=>'path',
'rules'=>array(
'/'=>'/view',
'//'=>'/',
'/'=>'/',
),
),
и раскомментировать его.
Строка
'urlFormat'=>'path'
решает нашу первую задачу. Она включает так называемый path-формат отображения URLов. URL /index.php?r=site/login будет выглядеть теперь как /index.php/site/login.
Теперь избавимся от index.php. Первым делом нужно разрешить перезапись URLов в настройках http-сервера. Если вы используете Apache, для этого достаточно создать в корневом каталоге сайта файл .htaccess с таким содержанием:
RewriteEngine on
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php
Теперь сконфигурируем свойство showScriptName компонента urlManager таким образом:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
)
'urlFormat'=>'path',
'showScriptName' => false,
)
Адрес страницы логина сократился до /site/login. Это уже совершенно дружественный пользователю «человеко-понятный» URL, и на этом можно остановиться.
Но мы пойдём ещё дальше и добавим к адресу каждой страницы расширение «html», чтобы при взгляде на адресную строку у не слишком искушённого пользователя не возникало даже мысли о том, на каком движке или фреймворке написан этот сайт. Это статические html-страницы — и всё тут! Конечно, наша истинная цель заключается не в том, чтобы обманывать неискушённых пользователей, а в том, чтобы потрафить вкусам поисковых систем и придать нашим страницам более SEO-дружественный вид.
Для этого добавим в urlManager следующее правило:
'pattern1'=>array('//'
Полный код будет выглядеть так:
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName' => false,
'urlSuffix'=>'.html',
'caseSensitive'=>false,
'rules'=>array(
'pattern1'=>array('//',),
),
),
'urlFormat'=>'path',
'showScriptName' => false,
'urlSuffix'=>'.html',
'caseSensitive'=>false,
'rules'=>array(
'pattern1'=>array('//',),
),
),
Как видите, ЧПУ в фреймворке Yii — это не сложно, хотя потребовалось небольшое вмешательство в настройки http-сервера.
Видео Делаем URL в Yii человеко-понятными (ЧПУ):